【问题标题】:Select unique values from the same column in two tables从两个表的同一列中选择唯一值
【发布时间】:2016-10-25 14:59:08
【问题描述】:

我只是在玩SQL,想达到以下结果 我有以下表格:

TABLE_1   ID   NAME
          1    CAR
          2    ANIMAL
          5    ROCK

TABLE_2   ID   NAME
          1    GRASS
          2    ROCKET
          3    STONE
          4    DOG

我希望我的查询从两个表中返回唯一的 ID 值:

ID
3
4
5

我尝试过使用 DISTINCT 和 FULL OUTER JOINS,但没有成功。 任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql duplicates unique


    【解决方案1】:

    您可以使用 UNION ALL ,将其分组并使用 HAVING 子句:

    SELECT ID FROM (
        SELECT ID FROM Table_1
        UNION ALL
        SELECT ID FROM Table_2)
    GROUP BY ID
    HAVING COUNT(*) = 1
    

    【讨论】:

    • 尽管我的答案按要求工作,但这个成本更低(并且重复的代码也更少),因此它可能是最好的答案。 (+1)
    • 如果它给你错误1248 - Every derived table must have its own alias然后通过添加别名来解决它SELECT ID FROM ( SELECT ID FROM Table_1 UNION ALL SELECT ID FROM Table_2) AS my_alias GROUP BY ID HAVING COUNT(*) = 1
    【解决方案2】:

    试试这个:

    SELECT ID
    FROM (
      SELECT ID
      FROM TABLE_1
    
      UNION ALL
    
      SELECT ID
      FROM TABLE_2) AS t
    GROUP BY ID
    HAVING COUNT(*) = 1
    

    【讨论】:

      【解决方案3】:
      SELECT id FROM table_1 WHERE id NOT IN (SELECT id FROM table_2)
      UNION
      SELECT id FROM table_2 WHERE id NOT IN (SELECT id FROM table_1)
      

      【讨论】:

      • 为什么?它是正确的。没有重复,因为 id 不在。
      • 不幸的是它返回 1, 3, 4, 5
      • 不,它没有。它返回 3、4、5。
      • 我正在寻找没有重复的 1,2,3,4,5,我不得不删除条件,但你让我很好。谢谢
      【解决方案4】:

      试试这个;)

      SELECT ID
      FROM(
        SELECT DISTINCT ID FROM TABLE1
        UNION ALL
        SELECT DISTINCT ID FROM TABLE2
      ) T
      GROUP BY ID
      HAVING COUNT(ID) = 1
      

      SQLFiddle DEMO

      【讨论】:

        【解决方案5】:

        使用 UNION 手动构建交叉点。如果您在两个表中都有一些独特的字段,这很容易,例如编号:

        SELECT id FROM Table 1
        WHERE id NOT IN (SELECT id FROM Table 2)
        
        UNION
        
        SELECT id FROM Table 2
        WHERE id NOT IN (SELECT id FROM Table 1)
        

        【讨论】:

          【解决方案6】:
          SELECT table_1.id
          FROM   table_1
          WHERE  table_1.id NOT IN (SELECT table_2.id FROM table_2)
          UNION
          SELECT table_2.id
          FROM   table_2
          WHERE  table_2.id NOT IN (SELECT table_1.id FROM table_1)
          

          【讨论】:

          • 无需选择4次。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-26
          • 1970-01-01
          • 1970-01-01
          • 2012-01-24
          • 2017-02-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多