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