Hier is een methode die least()
. gebruikt en greatest()
:
select least(source, destination), greatest(source, destination), max(distance)
from distance
group by least(source, destination), greatest(source, destination);
Dit heeft als nadeel dat je een rij zou kunnen retourneren die niet in de tabel staat. Als u bijvoorbeeld een enkele rij had met "Mumbai/Chennai/500", dan zou deze zoekopdracht "Chennai/Mumbai/500" opleveren -- en deze rij staat niet in de originele tabel.
Een alternatieve methode is dus:
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
);
Deze versie is ook ANSI-compatibel en zou in alle databases moeten werken.