sql left join澄清

时间:2017-03-28 22:10:43

标签: sql

我有两张桌子。

我需要表A中的所有记录,除非表B中有匹配,然后取表B的匹配值

因此,如果表A与表B匹配,那么我需要从结果中排除该值(即从表A中取出所有记录并用表B中的匹配值替换表A中的记录)。

根据我的理解,我在匹配列上加入了两个表,然后添加了一个where子句来排除空值,但我不确定这是否正确。

数据:

tableA (col1 =ID, col2 =value)
1, 5
2, 3
3, 7

tableB (col1 =ID, col2 =value)
4, 6
2, 9

expected result:

5

9

7

这是我得到的最接近但我不确定它是否正确:

select * from tableA tblA
left join tableB tblB
on tblA.matchingColumn = tblB.matchingColumn
where tblB.matchingColumn is null

2 个答案:

答案 0 :(得分:1)

这将返回TABLEA中的所有行。如果TABLEB中有任何匹配值,则它将用作VALUE。

SELECT TBLA.ID
    , COALESCE(TBLB.VALUE, TBLA.VALUE) VALUE
FROM TABLEA TBLA
    LEFT JOIN TABLEB TBLB
        ON TBLA.ID = TBLB.ID;

更新 - 此帖子的SQLFiddle

答案 1 :(得分:1)

执行从tablea到tableb的左连接,并根据tableb中的匹配使用a或b中的值

select tablea.id, case when tableb.id is null then tablea.value else tableb.value end value
from tablea
left join tableb on tablea.id=tableb.id