从两个表的同一列中选择唯一值

3

我只是在玩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,但没有成功。 希望能得到帮助。
6个回答

6
你可以使用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
尽管我的答案按要求工作,但这个更便宜(而且重复的代码也更少),因此它可能是最好的答案。(+1) - Edu
如果出现“1248 - 每个派生表都必须有自己的别名”错误,则可以通过添加别名来解决,例如:SELECT ID FROM ( SELECT ID FROM Table_1 UNION ALL SELECT ID FROM Table_2) AS my_alias GROUP BY ID HAVING COUNT(*) = 1 - Kalyan Halder

2

试试这个:

SELECT ID
FROM (
  SELECT ID
  FROM TABLE_1

  UNION ALL

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

2
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不在其中。 - Edu
不幸的是,它返回1、3、4、5。 - Grentley
不,它并不返回任何值。它会返回3、4、5。 - Edu
我正在寻找不重复的1、2、3、4、5,我必须去掉条件,但你给了我一个好方法。谢谢。 - G Clovs

2

试试这个;)

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


0

使用 UNION 手动构建交集。如果两个表中都有一些唯一字段,例如 ID,则很容易实现:

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)

-2
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)

2
不需要选择4次。 - sagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接