【问题标题】:SQL: Find diff between two tables with non-unique feature IDs?SQL:查找具有非唯一特征 ID 的两个表之间的差异?
【发布时间】: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?

标签: sql


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 2021-10-08
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多