SQL:在具有非唯一功能ID的两个表之间查找差异?

时间:2016-04-29 15:37:32

标签: sql

我有两个表,它们都有相同的两列:功能ID和语言。我想提取语言已更改为功能ID的记录。但问题是,每个功能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中是否有办法减轻这种情况?

感谢。

3 个答案:

答案 0 :(得分: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 :(得分:0)

您可以尝试在featureID和Language上执行TABLE1 LEFT JOIN TABLE2。然后,如果TABLE2中的语言语言为NULL,则它会被更改。

答案 2 :(得分: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