Как написать подзапрос внутри инструкции OUTER JOIN
Я хочу присоединиться к двум таблицам CUSTMR и DEPRMNT.
Мне нужно: LEFT OUTER JOIN двух или более таблиц с подзапросом внутри LEFT OUTER JOIN, как показано ниже:
Таблица: CUSTMR, DEPRMNT
Запрос как:
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 != ''
Здесь подзапрос:
SELECT
dp.DEPID, dp.DEPNAME
FROM
DEPRMNT dp
WHERE
dp.DEPADDRESS = 'TOKYO'
Можно ли записать такой подзапрос внутри LEFT OUTER JOIN?
Я получаю сообщение об ошибке при запуске этого запроса в моей базе данных DB2.
Ответы
Ответ 1
Вам нужен "идентификатор корреляции" ( "AS SS" thingy) в подвыборке, чтобы ссылаться на поля в состоянии "ON". Идентификатор, назначенный внутри субвыбора, не может использоваться в соединении.
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 != ''
Ответ 2
Я думаю, что вам не нужно использовать дополнительный запрос в этом сценарии. Вы можете напрямую покинуть внешнее соединение в таблице DEPRMNT.
При использовании Left Outer Join не используйте столбцы в таблице RHS соединения в условии where, вы получите неправильный вывод