sql >> Database >  >> RDS >> PostgreSQL

Meerdere left joins op meerdere tabellen in één query

Dit soort query zou moeten werken - na herschrijven met expliciete JOIN syntaxis:

SELECT something
FROM   master      parent
JOIN   master      child ON child.parent_id = parent.id
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  parent.parent_id = 'rootID'

De struikeldraad hier is dat een expliciete JOIN bindt voor "oude stijl" CROSS JOIN met komma (, ). Ik citeer hier de handleiding:

Nadat de eerste is herschreven, worden alle joins van links naar rechts toegepast (logisch - Postgres is vrij om tabellen in het queryplan anders te herschikken) en het werkt.

Om mijn punt te maken, dit zou ook werken:

SELECT something
FROM   master parent
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
,      master child
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  child.parent_id = parent.id
AND    parent.parent_id = 'rootID'

Maar expliciete JOIN syntaxis heeft over het algemeen de voorkeur, zoals uw geval nogmaals illustreert.

En houd er rekening mee dat meerdere (LEFT ) JOIN kan rijen vermenigvuldigen:



  1. Fout bij het openen van pgAdmin 4 op mac

  2. PHP MYSQL PDO SUM van kolommen

  3. MYSQL komt overeen met query twee tabellen

  4. Hoe kan ik rijen selecteren in MySQL vanaf een bepaald rijnummer?