2010-11-08 137 views
41

删除重复我做的几个表,我有一些基本的SQL,利用工会(无论正确与否)从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 
+1

你是说你的查询不删除重复? – Yada 2010-11-08 20:33:15

回答

110

Union将删除重复项。 Union All没有。

+2

这是真的,至少对于MS SQL来说。 – TarasB 2010-11-08 20:26:21

+2

有趣...不会删除上述语句中的重复内容 – thegunner 2010-11-08 20:31:33

+2

@thegunner - 您是否恰好拥有Timestamp数据类型作为您的一列? – 2010-11-08 20:33:37

4

其他人已经回答了你直接的问题,但也许你可以简化查询,以消除问题(或有我错过了什么,和查询像下面真的会产生不同的结果):

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 
1

如果使用T-SQL,然后它似乎从以前的职位,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 
0

既然你仍然得到只用UNION我会检查重复的结果:

  • 那它们是完全重复的。我的意思是,如果你犯了一个

    SELECT DISTINCT * FROM (<your query>) AS subquery

    你得到更少的文件?

  • 您没有查询的第一部分中的副本(可能由左连接生成)。据我所知UNION它不会添加到已经在其上的结果集行,但它不会删除已存在于第一个数据集中的重复项。

+1

至少T-SQL删除所有重复项,即使它们来自相同的数据集。 – Carlos 2014-05-13 10:12:04