Postgresql: просмотр из нескольких таблиц (с одинаковыми полями) - PullRequest
3 голосов
/ 22 апреля 2020

У меня есть следующая схема базы данных:

enter image description here

Я хочу создать представление для всех типов свойств (квартира, участок, дом) с адресными полями, цена / размер собственности и ID пользователя.

У меня есть скрипт sql, подобный этому:

create or replace VIEW auction_view3 AS
    select ROW_NUMBER() OVER(ORDER BY f.userid) AS id, f.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, f.price, f."size", f.rooms, f.floor 
        FROM address a, flat f, realassets r
        WHERE f.addressid = a.id AND a.realassetid =r.id 

Этот скрипт создает вид только для квартир, выглядит хорошо, но я также хочу показывать дома и участки, на мой взгляд, я не знаю, как указать в своем столбце цены - значения цен из всех таблиц свойств (plot, house, flat). Как я могу отображать данные из трех таблиц свойств в одном представлении. Я могу добиться этого с помощью нескольких выборов?

1 Ответ

4 голосов
/ 22 апреля 2020

Вам нужно использовать union, как в обычном select запросе:

create or replace view auction_view3 as
    select row_number() over(order by f.userid) as id, f.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, f.price, f."size", f.rooms, f.floor 
    from address a, flat f, realassets r
    where f.addressid = a.id and a.realassetid =r.id 
    union all
    select row_number() over(order by p.userid) as id, p.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, p.price, p."size", p.rooms, p.floor 
    from address a, plot p, realassets r
    where p.addressid = a.id and a.realassetid =r.id 
    union all
    select row_number() over(order by h.userid) as id, h.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, h.price, h."size", h.rooms, h.floor 
    from address a, house h, realassets r
    where h.addressid = a.id and a.realassetid =r.id 

Здесь union all работает быстро, но не удаляет дубликаты, если вы не хотите, их - используйте union вместо.

...