Unión exterior izquierda (unión entre tres tablas)?
Pregunta
Tengo una tabla principal de la que debo obtener datos. Tengo una combinación externa izquierda donde los campos coincidirán el 40% del tiempo. Y luego tengo otra unión donde necesito hacer coincidir los datos de la tabla A con.
Este es el SQL en pseudocódigo. Esta consulta no funcionará.
- Esta es la parte que quiero hacer pero no funciona. Y H.COL3 = A.STATE ????
Estoy trabajando con IBM DB2.
SELECT DISTINCT
APP_NO as app_no,
A.STATE as state
...
... Fields
...
FROM
TABLE_A A
LEFT OUTER JOIN
TABLE_B HIST
ON
HIST.COL1 = A.COL1
, TABLE_C B
LEFT OUTER JOIN
TABLE_D H
ON
H.COL2 = B.COL2
-- This is the part I want to do but doesn't work.
AND
H.COL3 = A.STATE????
WHERE
A.BRANCH = 'Data'
Solución
Creo que podría volver a escribirlo de esta manera (pero podría estar leyendo mal su declaración)
FROM
TABLE_A A LEFT OUTER JOIN TABLE_B HIST ON
HIST.COL1 = A.COL1
LEFT OUTER JOIN TABLE_D H ON
H.COL3 = A.STATE
LEFT OUTER JOIN TABLE_C B ON H.COL2 = B.COL2
WHERE
A.BRANCH = 'Data'
Además, el documento de IBM sobre este error dice:
Una cláusula ON asociada con un operador JOIN o en una declaración MERGE no es válida. Explicación:
Las referencias de columna en una cláusula ON solo deben hacer referencia a columnas de tablas que estén dentro del alcance de la cláusula ON.
Entonces podría estar equivocado, solo se parece a la cláusula ON errónea cuando se une externamente " H.COL3 = A.STATE " está fuera del alcance de la cláusula On porque la tabla A no está en ese alcance.
Otros consejos
¿Qué sucede si pones " AND H.COL3 = A.STATE " en tu cláusula WHERE?