Просмотр нескольких таблиц, содержащих одинаковые столбцы - PullRequest
10 голосов
/ 09 декабря 2008

У меня есть четыре таблицы, содержащие одинаковые столбцы, и я хочу создать представление для всех четырех, чтобы я мог запросить их вместе.

Возможно ли это?

(по утомительным причинам я не могу / не могу объединять их, что сделало бы это неуместным!)

Ответы [ 7 ]

16 голосов
/ 09 декабря 2008

Если предположить, что в дополнение к имеющих одинаковые имена столбцов, столбцы одного и того же содержат одни и те же данные, вы хотите создать представление, которое является объединением всех этих таблиц.

Что-то вроде следующего должно работать, но мой SQL ржавый:

(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
12 голосов
/ 09 декабря 2008

Возможно, стоит отметить, что вам может понадобиться использовать «объединение всех» для сохранения уникальных строк, которые могут существовать в нескольких таблицах. Стандартный союз удалит дубликаты.

8 голосов
/ 09 декабря 2008

По вашему запросу трудно сказать, ожидаете ли вы, что данные будут возвращены на основе 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, Имя ИЗ СТОЛБА СОЮЗ ВСЕХ ВЫБЕРИТЕ ID, Имя ИЗ TableC СОЮЗ ВСЕХ ВЫБЕРИТЕ ID, Имя ИЗ TableD

Это приводит к следующему выводу:

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
2 голосов
/ 09 декабря 2008

Вместо UNION используйте UNION ALL, если вы специально не хотите исключать повторяющиеся строки. UNION сам по себе выполняется дольше (из-за сортировки, которую он выполняет для поиска дубликатов) и удаляет повторяющиеся строки.

2 голосов
/ 09 декабря 2008

Вы можете объединить их (я бы посоветовал включить индикатор, из какой таблицы пришла каждая запись):

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..
2 голосов
/ 09 декабря 2008

Используйте оператор объединения

select * from table1
union 
select * from table2
union
select * from table3
2 голосов
/ 09 декабря 2008

Используйте союз. Вот объяснение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...