Данные из двух таблиц в одно представление

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

15
задан OMG Ponies 16 July 2010 в 17:30
поделиться

2 ответа

Да, использование 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. Нет никакого преимущества в производительности и может негативно повлиять на производительность, если вы создадите представление на основе другого. Кроме того, представления хрупкие - они могут меняться, и вы не узнаете, пока не воспользуетесь вспомогательным представлением, если возникнут проблемы.

25
ответ дан 1 December 2019 в 02:45
поделиться
create or replace view view_name as
select * from table_1
union all select * from table_2

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

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

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

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

.
1
ответ дан 1 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: