从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它不会添加到已经在其上的结果集行,但它不会删除已存在于第一个数据集中的重复项。