Подтвердить что ты не робот

Как написать подзапрос внутри инструкции 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.

4b9b3361

Ответ 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, вы получите неправильный вывод