Question

J'ai une table principale sur laquelle je dois obtenir des données. J'ai une jointure externe gauche où les champs correspondent à 40% du temps. Et puis j'ai une autre jointure où je dois faire correspondre les données de la table A avec.

Il s'agit du code SQL en pseudo-code. Cette requête ne fonctionnera pas.

- C’est la partie que je veux faire mais ne fonctionne pas.   ET H.COL3 = A.STATE ????

Je travaille avec 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'
Était-ce utile?

La solution

Je pense que vous pourriez le réécrire comme ceci (mais je pourrais mal lire votre déclaration)

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'

De plus, le document IBM IBM relatif à cette erreur indique:

Une clause ON associée à un opérateur JOIN ou à une instruction MERGE n'est pas valide. Explication:

Les références de colonne dans une clause ON doivent uniquement référencer les colonnes de tables comprises dans la portée de la clause ON.

Donc, je peux me tromper, cela ressemble à la clause ON erronée lors de la jonction externe "H.COL3 = A.STATE". est hors de portée de la clause On car la table A ne se trouve pas dans cette étendue.

Autres conseils

Que se passe-t-il si vous mettez le mot-clé "AND AND H.COL3 = A.STATE"? dans votre clause WHERE?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top