sql >> Databasteknik >  >> RDS >> PostgreSQL

Gå med en till många och hämta ett enda resultat

Enklare, kortare, snabbare 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, förklaring, benchmark och länkar i det här närbesläktade svaret .
Jag använder en LEFT JOIN , så att rader från table_a utan någon matchande rad i table_b släpps inte.

Sidanteckningar:

Även om det är tillåtet i PostgreSQL är det oklokt att använda date som kolumnnamn. Det är ett reserverat ord i varje SQL-standard och ett typnamn i PsotgreSQL.

Det är också ett antimönster att namnge en ID-kolumn id . Inte beskrivande och inte till hjälp. En (av många) möjliga namnkonvention skulle vara att namnge den efter tabellen där den är primärnyckel:table_a_id . Samma namn för främmande nycklar som refererar till det (om inget annat naturligt namn har företräde).



  1. 5 sätt att fixa felet "Dela med noll" i SQL Server (Msg 8134)

  2. Hur man trunkerar text med en ellips i MariaDB

  3. Jobbet för mysqld.service misslyckades Se systemctl-status mysqld.service

  4. jooq utöka befintlig dialekt. Använd MySQL-dialekt för att apache Hive-dialekt