选择UNION作为DISTINCT

use*_*535 12 mysql union distinct

执行UNION后,如何在单个列上执行DISTINCT操作?

T1
--
ID Value 
1  1
2  2
3  3

T2
--
ID Value
1  2
4  4
5  5
Run Code Online (Sandbox Code Playgroud)


我试图返回表格:

ID Value
1  1
2  2
3  3
4  4
5  5
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT DISTINCT ID, Value 
FROM (SELECT*FROM T1 UNION SELECT*FROM T2) AS T3
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.

Boh*_*ian 33

你为什么使用子查询?这将有效:

SELECT * FROM T1
UNION
SELECT * FROM T2
Run Code Online (Sandbox Code Playgroud)

UNION删除重复项.(UNION ALL不)


alf*_*alf 15

据我所知,没有"单列distinct":distinct总是应用于整个记录(除非在聚合中使用count(distinct name)).原因是,SQL无法猜测Value为您留下哪些值以及丢弃的值.这是你需要自己定义的东西.

尝试使用GROUP BY以确保 ID不重复,并且MIN选择特定值的任何聚合(在这里,如在您的示例中,它是幸存的最小值)Value:

SELECT ID, min(Value) FROM (SELECT * FROM T1 UNION ALL SELECT * FROM T2) AS T3
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)

应该正是你所需要的.也就是说,它不是相同的查询,并且没有distinct- 但它是一个返回示例中显示的查询.


KT8*_*KT8 6

我想这就是你的意思:

SELECT * 
  FROM T1
UNION
SELECT * 
  FROM T2 
  WHERE (
    **ID
** NOT IN (SELECT ID FROM T1)
  );
Run Code Online (Sandbox Code Playgroud)