Просмотр нескольких таблиц, содержащих одинаковые столбцы

StackOverflow https://stackoverflow.com/questions/352569

  •  20-08-2019
  •  | 
  •  

Вопрос

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

Это возможно?

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

Это было полезно?

Решение

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

Должно работать что-то вроде следующего, но мой 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 сам по себе требует больше времени для выполнения (из-за сортировки, которую он выполняет для поиска дубликатов) и удаляет повторяющиеся строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top