2010-11-08 6 views
41

Je fais une base sql sur quelques tables que j'ai, en utilisant un syndicat (à tort ou à raison)supprimer les doublons de l'union sql

mais je dois supprimer les doublons. Des idées?

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

Voulez-vous dire que votre requête ne supprime pas les doublons? – Yada

Répondre

110

Union supprime les doublons. Union All ne fait pas.

+2

c'est vrai, au moins pour MS SQL. – TarasB

+2

Intéressant ... ne supprime pas les doublons sur la déclaration ci-dessus – thegunner

+2

@thegunner - Avez-vous un type de données Timestamp comme une de vos colonnes? –

4

D'autres ont déjà répondu à votre question directement, mais vous pourriez peut-être simplifier la requête pour éliminer la question (ou ai-je manqué quelque chose, et une requête comme cela devrait vraiment produire des résultats sensiblement différents):

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

Si vous utilisez T-SQL, alors il ressort des messages précédents que les doublons UNION supprime. Mais si vous n'êtes pas, vous pouvez utiliser distinct. Cela ne veut pas tout à fait sentir droit à moi non plus, mais il pourrait vous obtenir le résultat que vous recherchez

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

Puisque vous obtenez toujours en double en utilisant seulement UNION je vérifier que:

  • Ce ce sont des doublons exacts. Je veux dire, si vous faites une

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

    vous obtenez moins de fichiers?

  • Que vous n'avez pas déjà les doublons dans la première partie de la requête (peut-être générée par la jointure gauche). Si je comprends bien UNION il ne sera pas ajouté aux lignes de l'ensemble de résultats qui sont déjà sur elle, mais il ne supprimera pas les doublons déjà présents dans le premier ensemble de données.

+1

Au moins T-SQL supprime tous les doublons, même s'ils proviennent du même ensemble de données. – Carlos

Questions connexes