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

时间:2013-10-31 11:20:21

标签: sql postgresql

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

架构如下:

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

请建议。

1 个答案:

答案 0 :(得分:1)

您需要使用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

跟进问题:一个人是否有可能在两个表中都有金额?如果是这样的话,你会得到什么价值?