PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dołącz jeden do wielu i pobierz pojedynczy wynik

Prostsze, krótsze, szybsze dzięki DISTINCT ON w PostgreSQL :

SELECT DISTINCT ON (a.id)
       a.id, a.name, a.date, b.code1, b.code2
FROM   table_a a
LEFT   JOIN table_b b USING (id)
ORDER  BY a.id, b.sort

Szczegóły, wyjaśnienia, testy porównawcze i linki w tej ściśle powiązanej odpowiedzi .
Używam LEFT JOIN , aby wiersze z table_a bez żadnego pasującego wiersza w table_b nie są upuszczane.

Uwagi poboczne:

Chociaż jest dozwolone w PostgreSQL, nierozsądne jest używanie date jako nazwę kolumny. To słowo zastrzeżone w każdym standardzie SQL i nazwę typu w PsotgreSQL.

Jest to również antywzorzec do nazwania kolumny identyfikatora id . Nie opisowe i nieprzydatne. Jedną (z wielu) możliwych konwencji nazewnictwa byłoby nazwanie go po tabeli, w której jest kluczem podstawowym:table_a_id . Ta sama nazwa dla odwołujących się do niej kluczy obcych (jeśli żadna inna nazwa naturalna nie ma pierwszeństwa).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DatabaseError:bieżąca transakcja została przerwana, polecenia zignorowane do końca bloku transakcji?

  2. findById() daje Nie znaleziono identyfikatora właściwości

  3. Wielokrotny podział i przypisanie identyfikatora zamówienia

  4. Agreguj funkcje w wielu kolumnach w postgresie

  5. Postgresql, zaktualizuj, jeśli istnieje wiersz z jakąś unikalną wartością, w przeciwnym razie wstaw