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

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

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

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

какой сервер базы данных вы используете?

ysth 09.12.2008 15:37

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

Jamal Hansen 09.12.2008 16:14
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
11
2
36 567
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

Используйте оператор 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 в один набор результатов.

Amitābha 12.08.2013 13:22

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

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..

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

Спасибо - пытался понять, почему некоторые строки пропускаются. Это хороший момент.

nearly_lunchtime 09.12.2008 15:41

Вместо 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

Другие вопросы по теме