sql >> Base de Datos >  >> RDS >> PostgreSQL

Múltiples uniones a la izquierda en varias tablas en una consulta

Este tipo de consulta debería funcionar, después de reescribir con JOIN explícito sintaxis:

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'

El hilo conductor aquí es que un JOIN explícito se une antes del "estilo antiguo" CROSS JOIN con coma (, ). Cito el manual aquí:

Después de reescribir la primera, todas las uniones se aplican de izquierda a derecha (lógicamente, Postgres es libre de reorganizar las tablas en el plan de consulta de lo contrario) y funciona.

Solo para aclarar mi punto, esto también funcionaría:

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'

Pero explícito JOIN la sintaxis es generalmente preferible, como ilustra su caso una vez más.

Y tenga en cuenta que múltiples (LEFT ) JOIN puede multiplicar filas: