我在对几个表进行基本的 SQL 操作,使用了 UNION(正确或错误)
但是我需要去除重复项。有什么建议吗?
select * from calls
left join users a on calls.assigned_to= a.user_id
where a.dept = 4
union
select * from calls
left join users r on calls.requestor_id= r.user_id
where r.dept = 4
Union
会移除重复项。Union All
不会。
使用UNION
会自动删除重复行,除非你指定使用UNION ALL
:
http://msdn.microsoft.com/en-us/library/ms180026(SQL.90).aspx
其他人已经回答了你的直接问题,但是也许你可以简化查询以消除问题(或者我错过了什么,像以下查询一样会产生实质性不同的结果吗?):
select *
from calls c join users u
on c.assigned_to = u.user_id
or c.requestor_id = u.user_id
where u.dept = 4
由于您仍然只使用UNION
而产生重复,我建议您检查以下几点:
它们是否完全相同。我的意思是,如果您执行
SELECT DISTINCT * FROM (<your query>) AS subquery
您会得到更少的文件吗?
您是否已经在查询的第一部分中有了重复项(可能是由左连接生成的)。据我所知,UNION
不会向结果集添加已经存在的行,但它不会删除已经存在于第一个数据集中的重复项。
SELECT DISTINCT *
FROM
(
select * from calls
left join users a on calls.assigned_to= a.user_id
where a.dept = 4
union
select * from calls
left join users r on calls.requestor_id= r.user_id
where r.dept = 4
)a