supprimer les doublons de l’union sql

Je fais un peu de SQL sur quelques tables, en utilisant une union (à tort ou à raison)

mais j’ai besoin de 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 

Union supprimera les doublons. Union All n’est pas.

Utiliser UNION supprime automatiquement les lignes en double, sauf si vous spécifiez UNION ALL : http://msdn.microsoft.com/en-us/library/ms180026(SQL.90).aspx

D’autres ont déjà répondu à votre question directe, mais vous pourriez peut-être simplifier la requête pour éliminer la question (ou ai-je manqué quelque chose, et une requête comme celle-ci produira 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 

Si vous utilisez T-SQL, les messages précédents indiquent que UNION supprime les doublons. Mais si vous ne l’êtes pas, vous pouvez utiliser distinct. Cela ne me semble pas juste non plus, mais cela pourrait vous donner 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 

Comme vous obtenez toujours des doublons en utilisant uniquement UNION je vérifierais que:

  • Qu’ils sont des doublons exacts. Je veux dire, si vous faites un

    SELECT DISTINCT * FROM () 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és par la jointure à gauche). Si je comprends bien UNION il n’appenda pas aux lignes de jeu de résultats déjà présentes, mais il ne supprimera pas les doublons déjà présents dans le premier dataset.