2013-09-30 51 views
1

我有兩個表。SQL連接,比較兩列值,匹配col值

Table 1 columns are 
==================== 
(MAINID, XID, Name) 
==================== 
(A1 1 SAP) 
(B2 2 BAPS) 
(C3 3 SWAMI) 

Table 2 columns are 
=================== 
(ID COL1) 
=================== 
(1 XYZ) 
(2 ABC) 

現在,我想找到這XID值不表2中的ID列。在表1中XID是唯一的,並且在表2中ID是PK。

回答

4

替代解決方案是通過使用LEFT JOIN。

SELECT tb1.* 
FROM Table1 AS tb1 LEFT JOIN Table2 AS tb2 
     ON tb1.XID = tb2.ID 
WHERE tb2.ID IS NULL 
5
select xid 
from table1 
where xid not in 
(select id from table2) 
+0

這爲我做類似的東西,它看起來也最簡單的。 – liquidki

1

這是使用設置差異tipical情況下,然而,由羅薩納提供的解決方案比這個(不知道史蒂夫·霍華德的解決方案)速度快:

select XID as ID from Table1 
except 
select ID from Table2; 

SQLFiddle

這樣你就可以從Table1中獲取那些不在Table2中的ID。 注意此解決方案在postgresql中工作,其他RDBMS使用與MINUS不同的子句。

下一個解決方案比使用IN和EXCEPT子句更快:

select XID from Table1 t1 
where (not exists (
    select ID from Table2 t2 where (t1.XID = t2.ID) 
)); 

SQLFiddle

+0

是什麼讓你認爲這些解決方案之一比其他解決方案更快?談論效率只有在與特定的RDBMS相關時纔有意義。有些方法在某些產品中工作速度更快,其他方法在其他方面更可取如果不知道OP使用什麼產品,就無法得出結論。 –