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'
¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top