SQL Join 从任一表(多个表)中获取数据

标签 sql postgresql

我有三个表:person、sav_account 和 cur_account。 我正在尝试编写一个查询,从任一表中为所有人选择金额。如果在两个表中都找到了 amount,我不会尝试添加这些值。

架构如下:

Person
-------
ID      |NAME       |AGE
1       |ICHIGO     |25
2       |NAMI       |21
3       |LUFFY      |18

SAV_ACCOUNT
-----------

ID      |AMOUNT
1       |10000
3       |20


CUR_ACCOUNT
-----------

ID      |AMOUNT
2       |100000000

我写了这个查询,但它给了我一个空集

select * from person p 
    inner join sav_account sa on (p.id = sa.id)
    inner join cur_account ca on (p.id = ca.id)

对于这个查询,我没有得到正确的数据。

select * from person p, sav_account sa, cur_account ca 
where p.id = sa.id OR p.id = ca.id

我正在尝试像这样获取最终数据:

ID      |NAME       |AGE        |AMOUNT
1       |ICHIGO     |25         |10000
3       |LUFFY      |18         |20 
2       |NAMI       |21         |1000000

请指教。

最佳答案

您需要使用OUTER JOIN

SELECT  a.ID, a.Name, a.Age,
        COALESCE(b.Amount, c.Amount, 0) Amount
FROM    Person a
        LEFT JOIN Sav_Account b
            ON a.ID = b.ID
        LEFT JOIN Cur_Account c
            ON a.ID = c.ID

后续问题:是否有可能一个人在两个表中都有金额?如果是这样,您将获得什么值(value)?

关于SQL Join 从任一表(多个表)中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19705103/

相关文章:

sql - 如何在 DBT 模型中使用引号内的 env_var?

sql - 选择根据其他表中是否存在外键排序的语句

sql - Postgres 从序列中分离主键

mysql - 如何将 MySQL 数据库转储转换为新的 PG 数据库?

sql - 如何在没有函数 generate_series 的情况下在 Postgresql 中创建数据系列

sql - 在三列复合索引中搜索两列 - Oracle

SQL几何查找半径中的所有点

sql - 如何在 PostgreSQL 中插入不包括某些记录的多条记录

json - 如何将 ServiceStack POCO 的默认数据类型从文本更改为 json?

sql - 多房间预订的数据库设计 : One To Many