从sql联合中删除重复项
我正在做一些基本的SQL我有几个表,使用联合(正确或错误)
但我需要删除重复。 有任何想法吗?
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 ALL
否则使用UNION
自动删除重复行: 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
如果您正在使用T-SQL,那么从以前的post中可以看出,UNION删除重复项。 但是,如果你不是,你可以使用不同的。 这对我来说也不太适合,但它可以让你find你想要的结果
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
既然你仍然只使用UNION
重复我会检查:
-
他们是完全重复的。 我的意思是,如果你做了一个
SELECT DISTINCT * FROM (<your query>) AS subquery
你得到更less的文件?
-
您没有查询的第一部分中的重复项(可能由左连接生成)。 据我所知
UNION
它不会添加到已经在其上的结果集行,但它不会删除已存在于第一个数据集中的重复项。