2010-11-08 71 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