sql >> Databáze >  >> RDS >> Mysql

SQL pro získání odlišného záznamu pro kombinaci dvou sloupců (bez ohledu na pořadí)

Zde je jedna metoda využívající least() a greatest() :

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

To má tu nevýhodu, že byste mohli vrátit řádek, který není v tabulce. Pokud byste například měli jeden řádek s „Mumbai/Chennai/500“, pak by tento dotaz vrátil „Chennai/Mumbai/500“ – a tento řádek není v původní tabulce.

Alternativní metoda je tedy:

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

Tato verze je také kompatibilní s ANSI a měla by fungovat ve všech databázích.



  1. SQL Vložit do tabulky nové řádky pro každé pole ve stejné tabulce

  2. bezpečnostní důsledky nastavení skupiny zabezpečení mysql aws

  3. Oracle PL/SQL jak vypočítat rozsah ip pro IPv6 cidr

  4. Generování postgresql uživatelského hesla