sql >> Database teknologi >  >> RDS >> PostgreSQL

Slut dig til en til mange og få et enkelt resultat

Enklere, kortere, hurtigere med 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

Detaljer, forklaring, benchmark og links i dette nært beslægtede svar .
Jeg bruger en LEFT JOIN , så rækker fra table_a uden nogen matchende række i table_b er ikke tabt.

Sidebemærkninger:

Selvom det er tilladt i PostgreSQL, er det uklogt at bruge date som kolonnenavn. Det er et reserveret ord i hver SQL-standard og et typenavn i PsotgreSQL.

Det er også et anti-mønster at navngive en ID-kolonne id . Ikke beskrivende og ikke nyttigt. En (af mange) mulige navnekonventioner ville være at navngive den efter tabellen, hvor den er primærnøgle:table_a_id . Samme navn for fremmednøgler, der refererer til det (hvis intet andet naturligt navn har forrang).



  1. Log ind som en anden bruger på MySQL

  2. Hvor mange klyngede indekser kan der være i en tabel?

  3. SimpleDateFormatter.parse giver output i et andet format end specificeret

  4. Hvordan kan jeg med Rails forespørge i db'en for et samlet antal og grupperet efter uge?