sql >> Database >  >> RDS >> PostgreSQL

Word lid van een tot veel en haal een enkel resultaat op

Eenvoudiger, korter, sneller met PostgreSQL's DISTINCT ON :

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

Details, uitleg, benchmark en links in dit nauw verwante antwoord .
Ik gebruik een LEFT JOIN , zodat rijen van table_a zonder enige overeenkomende rij in table_b worden niet verwijderd.

Kanttekeningen:

Hoewel het is toegestaan ​​in PostgreSQL, is het onverstandig om date te gebruiken als kolomnaam. Het is een gereserveerd woord in elke SQL-standaard en een typenaam in PsotgreSQL.

Het is ook een anti-patroon om een ​​ID-kolom een ​​naam te geven id . Niet beschrijvend en niet nuttig. Een (van de vele) mogelijke naamgevingsconventies zou zijn om het te noemen naar de tabel waar het de primaire sleutel is:table_a_id . Dezelfde naam voor externe sleutels die ernaar verwijzen (als geen andere natuurlijke naam voorrang heeft).



  1. XML ophalen uit vijf verschillende Oracle-tabellen

  2. join meerdere mysql-tabellen met prefix en groepssom

  3. Types.NVARCHAR gebruiken met Oracle JDBC-stuurprogramma om met Cyrillische tekens te werken

  4. Voordelen van NoSQL-databases – Alles wat u moet weten