Mysql
 sql >> Database >  >> RDS >> Mysql

SQL per ottenere record distinti per una combinazione di due colonne (indipendentemente dall'ordine)

Ecco un metodo che utilizza least() e greatest() :

select least(source, destination), greatest(source, destination), max(distance)
from distance
group by least(source, destination), greatest(source, destination);

Questo ha lo svantaggio che potresti restituire una riga non nella tabella. Ad esempio, se avessi una singola riga con "Mumbai/Chennai/500", questa query restituirebbe "Chennai/Mumbai/500" e questa riga non è nella tabella originale.

Quindi, un metodo alternativo è:

select source, destination, distance
from distance
where source < destination
union all
select destination, source, distance
from distance d
where source > destination and
      not exists (select 1
                  from distance d2
                  where d2.source = d.destination and d2.destination = d.source
                 );

Questa versione è anche compatibile con ANSI e dovrebbe funzionare in tutti i database.