2010-11-08 25 views
41

que estoy haciendo algo de SQL básica sobre algunas mesas que tengo, mediante una unión (correcta o incorrectamente)eliminar los duplicados de la unión SQL

pero necesito eliminar los duplicados. ¿Algunas ideas?

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

¿Está diciendo que su consulta no elimina los duplicados? – Yada

Respuesta

110

Union eliminará los duplicados. Union All no.

+2

esto es cierto, al menos para MS SQL. – TarasB

+2

Interesante ... no elimina los duplicados en la declaración anterior – thegunner

+2

@thegunner - ¿Tiene un tipo de datos Timestamp como una de sus columnas? –

4

Otros ya han respondido a su pregunta directa, pero quizás se podría simplificar la consulta para eliminar la pregunta (o he perdido algo, y una consulta como la siguiente realmente producir resultados sustancialmente diferentes):?

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 está utilizando T-SQL, a continuación, se deduce de los mensajes anteriores que UNION elimina duplicados. Pero si no lo eres, podrías usar distinto. Esto no acaba de sentirse bien para mí tampoco, pero que podría obtener el resultado que busca

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

Puesto que todavía está recibiendo duplicado utilizando sólo UNION Me gustaría comprobar que:

  • Eso son duplicados exactos. Es decir, si haces un

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

    Lo que se obtiene un menor número de archivos?

  • Que no tiene ya los duplicados en la primera parte de la consulta (tal vez generados por la combinación de la izquierda). Según tengo entendido, UNION no se agregará a las filas del conjunto de resultados que ya están en él, pero no eliminará los duplicados ya presentes en el primer conjunto de datos.

+1

Al menos T-SQL elimina todos los duplicados, incluso si provienen del mismo conjunto de datos. – Carlos