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- 但它是一个返回示例中显示的查询.
我想这就是你的意思:
SELECT *
FROM T1
UNION
SELECT *
FROM T2
WHERE (
**ID
** NOT IN (SELECT ID FROM T1)
);
Run Code Online (Sandbox Code Playgroud)