2016-04-29 74 views
1

我有兩個表都具有相同的兩列:功能ID和語言。我想提取功能ID的語言已更改的記錄。但問題是,每個功能ID都有多種語言。我的表是這樣的:SQL:使用非唯一功能ID查找兩個表之間的差異?

表1

Feature ID | Language 
------------------------ 
001   | 'en' 
001   | 'es' 
001   | 'pt' 
002   | 'es' 
002   | 'fr' 

表2

Feature ID | Language 
----------------------- 
001   | 'es' 
001   | 'en 
001   | 'fr' 
002   | 'fr' 
002   | 'es' 

我最初嘗試是這樣的:

SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM table 1 a FULL OUTER JOIN table 2 b on a.feature_id = b.feature_id 
WHERE a.language <> b.language 

但我希望這並沒有完全工作。我注意到這樣的結果:

002 | 002 | 'fr' | 'es' 
002 | 002 | 'es' | 'fr' 

有沒有在SQL的方式來減輕這種情況?

謝謝。

+0

您正在使用哪些DBMS? –

回答

2
SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM [table 1] a FULL OUTER JOIN [table 2] b on a.feature_id = b.feature_id 
    and a.language = b.language 
WHERE a.feature_id is null or b.feature_id is null 

將其更改爲一個完全外部的語言和功能部件,然後加入一個where子句來過濾下來沒有那些行比賽。

+1

這對我很有用,它非常簡單...謝謝! – Scott

0

您可以嘗試執行TABLE1左JOIN TABLE2 ON featureID和Language。那麼如果來自TABLE2的語言語言將是NULL,那麼它將被改變。

0

試試這個:

SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM table 1 a FULL OUTER JOIN table 2 b on a.feature_id = b.feature_id 
WHERE a.feature_id || a.language <> b.feature_id || b.language 

或者:

SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM table 1 a LEFT OUTER JOIN table 2 b 
on a.feature_id || a.language <> b.feature_id || b.language 
WHERE b.feature_id is NULL 
相關問題