sql >> Databasteknik >  >> RDS >> Mysql

SQL för att få distinkt post för en kombination av två kolumner (oavsett ordning)

Här är en metod som använder least() och greatest() :

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

Detta har nackdelen att du kan returnera en rad som inte finns i tabellen. Om du till exempel hade en enda rad med "Mumbai/Chennai/500", så skulle denna fråga returnera "Chennai/Mumbai/500" -- och den här raden finns inte i den ursprungliga tabellen.

Så en alternativ metod är:

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

Denna version är också ANSI-kompatibel och bör fungera i alla databaser.



  1. Hur ändrar jag fält i den nya PostgreSQL JSON-datatypen?

  2. Sortera en PHP-array i kolumner

  3. Felsökning av privata procedurer

  4. Ersätta värde inom en kommaavgränsad sträng i MySQL?