Просмотр нескольких таблиц, содержащих одинаковые столбцы
Вопрос
У меня есть четыре таблицы, содержащие одинаковые столбцы, и я хочу создать представление для всех четырех, чтобы можно было запрашивать их вместе.
Это возможно?
(по утомительным причинам я не могу/не разрешено объединять их, что сделало бы это неуместным!)
Решение
Предполагая, что помимо одинаковых имен столбцов они содержат одни и те же данные, вы хотите создать представление, которое представляет собой объединение всех этих таблиц.
Должно работать что-то вроде следующего, но мой SQL заржавел:
(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
Другие советы
Возможно, стоит отметить, что вам может потребоваться использовать «объединить все», чтобы сохранить уникальные строки, которые могут существовать более чем в одной таблице.Стандартное объединение удалит дубликаты.
По вашему запросу трудно определить, ожидаете ли вы, что данные будут возвращены на основе 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, Имя из Tablea Union All Select Id, Имя из TableB Union All Select Id, Имя из Union Tablec All Select Id, Имя из напротив
Это приводит к следующему результату:
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
Используйте союз.Вот объяснение
Используйте оператор объединения
select * from table1
union
select * from table2
union
select * from table3
Вы можете, если объедините их (я бы предложил включить индикатор того, из какой таблицы взята каждая запись):
select table1.column1, 1 as TableNumber
from table1
union
select table2.column1, 2 as TableNumber
from table2
.. etc ..
Вместо UNION используйте UNION ALL, если только вы специально не хотите исключить повторяющиеся строки.UNION сам по себе требует больше времени для выполнения (из-за сортировки, которую он выполняет для поиска дубликатов) и удаляет повторяющиеся строки.