sql >> Database >  >> RDS >> Mysql

SQL om een ​​afzonderlijke record te krijgen voor een combinatie van twee kolommen (ongeacht de volgorde)

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.



  1. MAAK TABEL ZOALS A1 als A2

  2. Problemen met tekensets met MySQL-verbinding

  3. Mogelijk om een ​​MySQL-vreemde sleutel te doen naar een van de twee mogelijke tabellen?

  4. mysql is een array in meerdere kolommen