Jointure externe gauche (jointure entre trois tables)?
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'
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?