我有两张桌子。
我需要表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
答案 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