2016-04-24 85 views
1

我有兩張桌子。如何從我的案例的第一張表中找到第二張表中的缺失行?

表1:首先

-------------------------- 
| iso   | WeldNo | 
-------------------------- 
| AMD-11201-01 |  02 | 
| RFG-11203-01 |  01 | 
| AMD-11201-01 |  03 | 
| RFG-11203-01 |  05 | 

表2:第二

-------------------------- 
| iso   | WeldNo | 
-------------------------- 
| AMD-11201-01 |  02 | 
| RFG-11203-01 |  01 | 
| RFG-11203-01 |  05 | 

預期結果:

-------------------------- 
| iso   | WeldNo | 
-------------------------- 
| AMD-11201-01 |  03 | 

我試着查詢,但不會工作

select a.iso, a.WeldNo 
from first a 
where a.WeldNo, a.iso not in (select b.iso,b.WeldNo from second b); 

請給解決了我的方案

+1

? – dotnetom

+2

您的查詢已準備就緒。用'..解決它在哪裏(a.iso,a。WeldNo)not in ..'(這是用於MySQL的,不知道它是否適用於sql-server)。 –

+1

我第二個dotnetom的問題。你對一般的SQL,MySQL或SQL Server有什麼要求?除非你正在談論在他們之間移植一個數據庫,否則你不應該同時標記mysql和sql-server。因此,如果它是通用SQL,則同時刪除MySQL和sql-server。如果它關於特定數據庫選擇那個。 – Codeguy007

回答

2

從對問題的標籤並不清楚您正在使用的RDBMS。如果您使用的是SQL Server,您可以使用EXCEPT

select a.iso, a.WeldNo 
from first a 

EXCEPT 

select b.iso, b.WeldNo 
from second b 

這從SELECT語句選擇的所有項目,但不包括那些在第二SELECT語句中找到的人。

如果你正在使用MySQL,你可以稍微修復您的查詢(即加括號),你應該得到一個工作查詢:

select a.iso, a.WeldNo 
from first a 
where (a.WeldNo, a.iso) not in (select b.WeldNo, b.iso from second b) 
+0

您的列順序在第二個查詢中是differend。 'a.WeldNo,a.iso'和'b.iso,b.WeldNo'。 –

+0

@PaulSpiegel感謝您的注意,修復它 – dotnetom

+0

沒有任何工作任何查詢在這裏。 – user3041016

0

您可以使用一個LEFT JOINEXCEPT

左連接:

SELECT t1.iso, t1.WeldNo 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.iso = t2.iso AND t1.WeldNo = t2.WeldNo 
WHERE t2.iso IS NULL 

除外:

SELECT iso, WeldNo 
FROM Table1 
EXECEPT 
SELECT iso, WeldNo 
FROM Table2 

有一定的差異,但。在除外情況下,兩個結果必須具有相同的列,而LEFT JOIN可讓您指定要從每個表中選擇的內容。此外,在大多數情況下,LEFT JOIN將更具性能,因爲它更好地優化。但是,EXCEPT將只返回獨特的行中第二個查詢中缺少的第一個查詢,所以它可能更適用於這種情況。當然,你可以添加一個DISTINCT要第一個查詢了類似的結果:

SELECT DISTINCT t1.iso, t1.WeldNo 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.iso = t2.iso AND t1.WeldNo = t2.WeldNo 
WHERE t2.iso IS NULL 

所有這一切說,它可能會更好使用LEFT JOIN,但它可能會因你的數據庫的不同而不同。

0

我會用not exists因爲它表達的意圖明確,即「從表1中選擇所有行具有相同的ISO和表2的行WeldNo不存在」那麼,你使用MySQL或SQL Server

select * from table1 t1 
where not exists (
    select 1 from table2 t2 
    where t2.iso = t1.iso 
    and t2.WeldNo = t1.WeldNo 
) 
相關問題