SQL:查找具有非唯一特征 ID 的两个表之间的差异?
Posted
技术标签:
【中文标题】SQL:查找具有非唯一特征 ID 的两个表之间的差异?【英文标题】:SQL: Find diff between two tables with non-unique feature IDs? 【发布时间】:2016-04-29 15:37:32 【问题描述】:我有两个表,它们都有相同的两列:特征 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 中有没有办法缓解这种情况?
谢谢。
【问题讨论】:
您使用的是哪个 DBMS? 【参考方案1】: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 子句过滤到没有匹配的行。
【讨论】:
【参考方案2】:您可以尝试在 featureID 和 Language 上执行 TABLE1 LEFT JOIN TABLE2。那么如果 TABLE2 中的语言语言将为 NULL,则它已更改。
【讨论】:
【参考方案3】:试试这个:
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
【讨论】:
以上是关于SQL:查找具有非唯一特征 ID 的两个表之间的差异?的主要内容,如果未能解决你的问题,请参考以下文章