Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL pour obtenir un enregistrement distinct pour une combinaison de deux colonnes (quel que soit l'ordre)

Voici une méthode utilisant least() et greatest() :

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

Cela présente l'inconvénient que vous pourriez renvoyer une ligne qui n'est pas dans la table. Par exemple, si vous aviez une seule ligne avec "Mumbai/Chennai/500", alors cette requête renverrait "Chennai/Mumbai/500" -- et cette ligne n'est pas dans la table d'origine.

Donc, une méthode alternative est :

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
                 );

Cette version est également compatible ANSI et devrait fonctionner dans toutes les bases de données.