PostgreSQL:从多个表中查看(具有相同字段)

3

我有以下数据库架构:

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 

这个脚本仅创建了用于公寓的视图,它看起来不错,但是我也想在我的视图中显示房屋和地块,我不知道如何在视图中添加我的价格列-来自所有物业表(plothouseflat)的价格值。

我该如何在一个视图中显示来自三个房产表的数据?

我可以通过多个选择语句来实现吗?

1个回答

3
您需要使用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,因为此时 union all 虽然速度较快,但不会去除重复项。


@GordonLinoff 我不知道,也许交叉连接是 OP 需要的,那就是他提供的查询。他的问题是针对其他表执行相同的操作,我已经提供了答案。 - Andronicus
你的查询在技术上是正确的。这是针对它所得到的赞--人们可以自由点赞。我也可以自由评论。请注意,我没有对答案进行反对票,只是质疑了点赞。"where"子句显然正在实现“join”。 - Gordon Linoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接