Je veux joindre deux tables CUSTMR et DEPRMNT.
Mon besoin est: LEFT OUTER JOIN DE deux ou plusieurs tables avec une sous-requête à l'intérieur de LEFT OUTER JOIN, comme indiqué ci-dessous:
Tableau: CUSTMR, DEPRMNT
Requête en tant que:
SELECT
cs.CUSID
,dp.DEPID
FROM
CUSTMR cs
LEFT OUTER JOIN (
SELECT
dp.DEPID
,dp.DEPNAME
FROM
DEPRMNT dp
WHERE
dp.DEPADDRESS = 'TOKYO'
)
ON (
dp.DEPID = cs.CUSID
AND cs.CUSTNAME = dp.DEPNAME
)
WHERE
cs.CUSID != ''
Ici la sous-requête est:
SELECT
dp.DEPID, dp.DEPNAME
FROM
DEPRMNT dp
WHERE
dp.DEPADDRESS = 'TOKYO'
Est-il possible d'écrire une telle sous-requête dans LEFT OUTER JOIN?
Je reçois une erreur lors de l'exécution de cette requête sur ma base de données DB2.
Vous avez besoin de "l'identifiant de corrélation" (le "AS SS") sur la sous-sélection pour référencer les champs dans la condition "ON". Les identifiants attribués à l'intérieur de la sous-sélection ne sont pas utilisables dans la jointure.
SELECT
cs.CUSID
,dp.DEPID
FROM
CUSTMR cs
LEFT OUTER JOIN (
SELECT
DEPID
,DEPNAME
FROM
DEPRMNT
WHERE
dp.DEPADDRESS = 'TOKYO'
) ss
ON (
ss.DEPID = cs.CUSID
AND ss.DEPNAME = cs.CUSTNAME
)
WHERE
cs.CUSID != ''
Je pense que vous ne devez pas utiliser de sous-requête dans ce scénario. Vous pouvez directement quitter la jointure externe de la table DEPRMNT.
Lorsque vous utilisez la jointure externe gauche, n’utilisez pas les colonnes de la table RHS de la jointure dans la condition où, vous obtiendrez une sortie incorrecte.