У меня есть четыре таблицы, содержащие точно такие же столбцы, и я хочу создать представление для всех четырех, чтобы я мог запрашивать их вместе.
Это возможно?
(по утомительным причинам я не могу / мне не разрешено комбинировать их, что сделало бы это несущественным!)
Я не уверен в вашей точной настройке, но если у вас есть 4 повторяющиеся таблицы, которые вы хотите запросить с помощью объединения, одна таблица со столбцом типа может иметь больше смысла. Если, конечно, система уже не существует или есть другие факторы.


Используйте союз. Вот объяснение
Используйте оператор union
select * from table1
union
select * from table2
union
select * from table3
Предполагая, что помимо одинаковых имен столбцов, они содержат одни и те же данные, и вы хотите создать представление, которое представляет собой объединение всех этих таблиц.
Что-то вроде следующего должно работать, но мой SQL ржавый:
(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
UNION используется для объединения результатов нескольких операторов SELECT в один набор результатов.
Вы можете, если объедините их (я бы посоветовал включить некоторый индикатор того, из какой таблицы была взята каждая запись):
select table1.column1, 1 as TableNumber
from table1
union
select table2.column1, 2 as TableNumber
from table2
.. etc ..
Возможно, стоит отметить, что вам может потребоваться использовать «объединение всех» для сохранения уникальных строк, которые могут существовать более чем в одной из таблиц. Стандартное объединение удалит дубликаты.
Спасибо - пытался понять, почему некоторые строки пропускаются. Это хороший момент.
Вместо UNION используйте UNION ALL, если вы специально не хотите исключать повторяющиеся строки. Сам по себе UNION требует больше времени для выполнения (из-за сортировки, которую он выполняет для поиска дубликатов) и удаляет повторяющиеся строки.
Из вашего запроса трудно сказать, ожидаете ли вы, что данные будут возвращены на основе UNION или в виде представления, содержащего столбцы дискретно. Очевидно, это имеет эффект.
Рассмотрим следующий пример:
TableA
ID Name RelatedID
1 John 2
2 Paul 1
TableB
ID Name RelatedID
1 Ringo 1
2 George 1
TableC
ID Name RelatedID
1 Bob 1
TableD
ID Name RelatedID
1 Kate NULL
Теперь запустите следующий запрос:
ВЫБЕРИТЕ ID, имя из таблицыA СОЮЗ ВСЕ ВЫБРАТЬ ИДЕНТИФИКАТОР, имя ИЗ таблицыB СОЮЗ ВСЕ ВЫБРАТЬ ИДЕНТИФИКАТОР, имя ИЗ таблицыC СОЮЗ ВСЕ ВЫБРАТЬ ID, имя из таблицыD
Это приводит к следующему выводу:
1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate
Это то, что вам нужно? Если это так, вы используете запрос UNION.
Теперь, если вы хотите получить дискретное представление связанных данных, вам может потребоваться сделать что-то вроде этого:
SELECT A.ID MasterID, A.Name MasterName,
B.ID BandID, B.Name BandName,
C.ID BlackadderID, C.Name BlackadderName
D.ID BlackadderRealID, D.Name BlackadderRealName
FROM
TableA A
INNER JOIN
TableB B
ON
A.RelatedID = B.ID
INNER JOIN
TableC C
ON
B.RelatedID = C.ID
INNER JOIN
TableD D
ON
C.RelatedID = D.ID
Это приведет к следующему виду данных:
MasterID MasterName BandID BandName BlackAdderID BlackAdderName BlackadderRealID BlackadderRealName
1 John 2 George 1 Bob 1 Kate
2 Paul 1 Ringo 1 Bob 1 Kate
какой сервер базы данных вы используете?