Данные из двух таблиц в одном представлении - PullRequest
14 голосов
/ 16 июля 2010

Можно ли получить данные из двух таблиц (которые имеют одинаковые поля) в одном представлении. По сути, представление видит данные, как если бы это была одна таблица.

Ответы [ 2 ]

24 голосов
/ 16 июля 2010

Да, использование UNION -

CREATE VIEW vw_combined AS
   SELECT * FROM TABLE1
   UNION ALL
   SELECT * FROM TABLE2

... требует, чтобы было одинаковое количество столбцов, и типы данных совпадали в каждой позиции.

.. предпочтительно,используя JOIN:

CREATE VIEW vw_combined AS
   SELECT * 
    FROM TABLE1 t1
    JOIN TABLE2 t2 ON t2.col = t1.col

Но я хочу предостеречь от зависимости от представлений - если они не материализованы, они представляют собой только подготовленные операторы SQL.Там нет никакого выигрыша в производительности и может негативно повлиять на производительность, если вы строите представление на основе другого.Кроме того, представления являются хрупкими - они могут измениться, и вы не узнаете, пока не используете вспомогательное представление, если есть проблемы.

1 голос
/ 16 июля 2010
create or replace view view_name as
select * from table_1
union all select * from table_2

Примечание: Столбцы в представлении устанавливаются во время создания представления. Добавление столбцов в table_1 и table_2 после создания представления не будет отображаться в view_name. Вам нужно будет повторно запустить вышеупомянутый DDL, чтобы отобразились новые столбцы.

Если вы хотите, чтобы повторяющиеся строки были свернуты в отдельные строки (но потенциально больше работы для сервера):

create or replace view view_name as
select * from table_1
union select * from table_2

Обычно неправильно использовать * в списке выбора, но, предполагая, что запросы, использующие представление, будут выбирать именно то, что им нужно, я бы использовал это здесь вместо того, чтобы явно указывать все столбцы. (Тем более, что мне не хотелось бы добавлять имена столбцов при изменении table_1 и table_2.)

...