sql >> Database teknologi >  >> RDS >> Mysql

SQL for at få særskilt post for en kombination af to kolonner (uanset rækkefølge)

Her er en metode, der bruger least() og greatest() :

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

Dette har den ulempe, at du kan returnere en række, der ikke er i tabellen. Hvis du f.eks. havde en enkelt række med "Mumbai/Chennai/500", så ville denne forespørgsel returnere "Chennai/Mumbai/500" -- og denne række er ikke i den oprindelige tabel.

Så en alternativ metode er:

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

Denne version er også ANSI-kompatibel og burde fungere i alle databaser.



  1. Opret et SQL Server Agent-skema med T-SQL

  2. Oracle dynamisk DESC og ASC i rækkefølge efter

  3. Hvorfor foretrækker vi altid at bruge parametre i SQL-sætninger?

  4. Hvilken kolonnedatatype skal jeg bruge til at gemme store mængder tekst eller html