2014-10-16 78 views
0

我有兩個包含文章的表。比較兩個表並獲取不匹配的值

表1 article和表2 articlefm

兩個表具有一個場與artnr

'表1'具有2192,artnr和'表2'具有2195,artnr

我想在我的查詢中找出什麼是3個不匹配的文章中的artnr

如果'表2'有更多的文章,然後'表1',那麼我需要一個與這些artnr列表。

我該如何做到這一點?

回答

0

在大多數數據庫,你可以使用except(SQL標準)或minus(Oracle專用):

select artnr 
from articlefm -- table 2 
except 
select artnr 
from article -- table 1 

其他你可以嘗試not in

select atrnr 
from articlefm -- table 2 
where atrnr not in 
     (select artnr 
     from article -- table 1 
     ) 

這會給你的文章編號,存在於2中,但不在1中。

+4

'except'是由SQL標準定義的運算符。 Oracle正在使用的是「minus」。 – 2014-10-16 10:47:56

+0

@a_horse_with_no_name:感謝您的澄清。 – 2014-10-16 10:48:59

1

您可以使用FULL JOIN來執行此操作:

SELECT COALESCE(t1.Artnr, t2.Artnr) AS Artnr, 
     CASE WHEN t1.Artnr IS NULL THEN 'Table1' ELSE 'Table2' END AS MissingFrom 
FROM Table1 AS t1 
     FULL JOIN Table2 AS t2 
      ON t1.Artnr = t2.Artnr 
WHERE t1.Artnr IS NULL 
OR  t2.Artnr IS NULL; 

請注意,只是因爲3的計數存在差異,並不一定表示一個表中只有3個記錄從另一個表中缺失。想象一下以下內容:

Table1   Table2 
------   ------- 
1    2 
2    4 
3    6 
4 

的差異數爲1,但實際上有2條記錄出現在表1中沒有的表2和表2中,是不是在表1 1。使用上面的全連接方法,您將得到如下結果:

Artnr | MissingFrom 
------+------------- 
    1 | Table1 
    3 | Table1 
    6 | Table2 
相關問題