2010-11-08 27 views
41

sto facendo un po 'di sql di base su alcuni tavoli che ho, utilizzando un sindacato (a torto oa ragione)rimuovere i duplicati da SQL unione

ma ho bisogno di rimuovere i duplicati. Qualche idea?

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

Stai dicendo che la tua domanda non rimuove i duplicati? – Yada

risposta

110

Union rimuove i duplicati. Union All no.

+2

questo è vero, almeno per MS SQL. – TarasB

+2

Interessante ... non rimuove i duplicati nella dichiarazione di cui sopra – thegunner

+2

@thegunner - Ti capita di avere un tipo di dati Timestamp come una delle tue colonne? –

4

Altri hanno già risposto alla tua domanda diretta, ma forse si potrebbe semplificare la query per eliminare la domanda (o hanno ho perso qualcosa, e una query come la seguente sarà davvero produrre risultati sostanzialmente diversi):?

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

Se si utilizza T-SQL allora appare dalle precedenti post che UNION elimina i doppioni. Ma se non lo sei, potresti usare distinti. Questo non abbastanza sembra giusto neanche a me, ma potrebbe ottenere il risultato che stai cercando

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

Dal momento che si sta ancora ricevendo duplicato utilizzando solo UNION vorrei verificare che:

  • Quello sono duplicati esatti. Voglio dire, se si effettua una

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

    si vuole ricevere un minor numero di file?

  • Che non si hanno già i duplicati nella prima parte della query (forse generata dal join di sinistra). A quanto ho capito, UNION non aggiungerà alle righe del set di risultati che sono già su di esso, ma non rimuoverà i duplicati già presenti nel primo set di dati.

+1

Almeno T-SQL rimuove tutti i duplicati, anche se provengono dallo stesso set di dati. – Carlos

Problemi correlati