2017-01-12 46 views
0

我試圖從表A中存在的三列中找到值的組合,而在表B中找到不是。我的代碼一直在使用地址逗號衝突where子句。我怎樣才能解決這個問題?從表中找到缺失的值

SELECT a.Address,a.Last_Name_First_Name,a.Actual_Sale_Date 
FROM salesdataall a 
WHERE a.Address, a.Last_Name_First_Name, a.Actual_Sale_Date 
NOT IN (SELECT b.Address,b.Last_Name_First_Name,b.Actual_Sale_Date 
         FROM salesdataun b) 


ERROR: syntax error at or near , 
LINE 3: WHERE a.Address,a.Last_Name_First_Name,a.A... 
         ^
+2

一個易於閱讀的方式是使用NOT EXISTS或十字路口 – Milney

+0

@ Milney,你是絕對正確的。完全忘了它。除了這種情況也會起作用。 –

回答

2

你忘了括號:

SELECT a.Address,a.Last_Name_First_Name,a.Actual_Sale_Date 
FROM salesdataall a 
WHERE (a.Address, a.Last_Name_First_Name, a.Actual_Sale_Date) 
     NOT IN (SELECT b.Address,b.Last_Name_First_Name,b.Actual_Sale_Date 
       FROM salesdataun b) 

這是在有意義塗在列的列表括號中的罕見的情形之一。

+0

別忘了插入... – jarlh

+0

真棒,謝謝馬。 –

+0

@jarlh:當然;) –

1

您可以用加入做到這一點:

SELECT a.Address,a.Last_Name_First_Name,a.Actual_Sale_Date 
FROM salesdataall a 
LEFT JOIN salesdataun b 
ON a.Address = b.Address AND 
    a.Last_Name_First_Name = b.Last_Name_First_Name AND 
    a.Actual_Sale_Date = b.Actual_Sale_Date 
WHERE a.Address IS NULL