Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL, aby uzyskać odrębny rekord dla kombinacji dwóch kolumn (niezależnie od kolejności)

Oto jedna metoda wykorzystująca least() i greatest() :

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

Ma to tę wadę, że możesz zwrócić wiersz, którego nie ma w tabeli. Na przykład, jeśli masz pojedynczy wiersz z „Mumbai/Chennai/500”, to zapytanie zwróci „Chennai/Mumbai/500” – a tego wiersza nie ma w oryginalnej tabeli.

Tak więc alternatywną metodą jest:

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

Ta wersja jest również zgodna z ANSI i powinna działać we wszystkich bazach danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wartość strefy czasowej serwera „CEST” jest nierozpoznana

  2. Jak naprawić typowe problemy z bazą danych MySQL?

  3. Jak usunąć duplikaty w tabeli SQL na podstawie wielu pól

  4. Po prostu przekonwertuj 5-cyfrowy numer w bazie mysql na datę

  5. Jaki jest najlepszy sposób na uniknięcie danych wprowadzanych przez użytkownika dla wyrażeń regularnych w MySQL?