2013-04-09 70 views
0

我有表A帶有Id列。僅返回其他表中不存在值的行

我有表B與Id1和Id2列。

我想在表返回所有行b,無論Id1的或Id2的在表A中存在。如果表中的Id1或Id2表b表A中匹配,我想返回該結果。

因此,如果表阿看上去像以下:

Id  
123 
456 
789 

表乙看上去像以下:

Id1 Id2  
123 545 
343 432 
184 789 

行1和3將不會被返回爲它們每場比賽在表A。但是,表b中的第2行均不匹配,因此將返回。

我一直在想我的頭,似乎無法弄清楚查詢。任何幫助,將不勝感激!

回答

2

假設你的ID列不爲空:

select * from tableB 
where Id1 not in (select Id from tableA) 
and Id2 not in (select Id from tableA) 

select b.* 
from tableB b 
left join tableA a1 on b.id1=a1.id 
left join tableA a2 on b.id2=a2.id 
where a1.id is null and a2.id is null 
+1

爲什麼要查詢'a'兩次? 'select b。* from tableB b left join tableA a on(b.id1 = a.id or b.id2 = a.id)其中coalesce(a.id1,a.id2)爲空' – haki 2013-04-10 07:48:11

+0

@haki - 良好的解決方案!您可以將其作爲單獨的答案發布。 – 2013-04-10 08:55:54

1

當尋找其中的一些數據確實與另一個表中沒有存在記錄總是有存在條款,因此名稱;-)

select * from tableB 
where not exists 
(
    select * 
    from tableA 
    where id in (tableB.id1, tableB.id2) 
); 
相關問題