Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL zum Abrufen eines eindeutigen Datensatzes für eine Kombination aus zwei Spalten (unabhängig von der Reihenfolge)

Hier ist eine Methode, die least() verwendet und greatest() :

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

Dies hat den Nachteil, dass Sie eine Zeile zurückgeben könnten, die nicht in der Tabelle enthalten ist. Wenn Sie beispielsweise eine einzelne Zeile mit „Mumbai/Chennai/500“ hätten, würde diese Abfrage „Chennai/Mumbai/500“ zurückgeben – und diese Zeile befindet sich nicht in der ursprünglichen Tabelle.

Eine alternative Methode ist also:

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

Diese Version ist auch ANSI-kompatibel und sollte in allen Datenbanken funktionieren.