2017-03-28 58 views
0

我有两个表。sql左加入澄清

我需要从表一,除了那里是表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; 

UPDATE - SQLFiddle此线程

+0

我试过了您的查询,我相信我可能会错误地呈现我的数据。我更新了表格和预期结果,请介意再看一下吗? – HelpMeWithXSLT

+0

@HelpMeWithXSLTP请看这个http://sqlfiddle.com/#!9/7bc86/4 – Pons

1

执行左键从表A加入到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