sql >> Databáze >  >> RDS >> PostgreSQL

Více levých spojení na více tabulkách v jednom dotazu

Tento druh dotazu by měl fungovat - po přepsání explicitním JOIN syntaxe:

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'

Vypínací drát je zde explicitní JOIN se váže před "starým stylem" CROSS JOIN s čárkou (, ). Příručku cituji zde:

Po přepsání prvního se všechna spojení aplikují zleva doprava (logicky – Postgres může jinak uspořádat tabulky v plánu dotazů) a funguje to.

Abych uvedl můj názor, toto by také fungovalo:

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'

Ale explicitně JOIN syntaxe je obecně vhodnější, jak váš případ znovu ilustruje.

A mějte na paměti, že více (LEFT ) JOIN může násobit řádky:



  1. Trvalé datum v databázi se nerovná datu načtení

  2. Plně spravovaný hosting PostgreSQL na AWS a Azure se spouští včas pro starší migrace

  3. CHYBA:Chyba 1005:Nelze vytvořit tabulku 'cat10e.recording' (chyba:150)

  4. Mohu podmíněně vynutit omezení jedinečnosti?