35

2つのテーブルCUSTMRとDEPRMNTを結合したいと思います。

私が必要としているのは、次のとおりです。以下に示すように、LEFTOUTERJOIN内にサブクエリを持つ2つ以上のテーブルのLEFTOUTERJOIN:

表: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データベースでこのクエリを実行すると、エラーが発生します。

4

2 に答える 2

67

「ON」状態のフィールドを参照するには、副選択に「相関ID」(「ASSS」のもの)が必要です。サブセレクト内で割り当てられたIDは、結合では使用できません。

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 != '' 
于 2012-05-08T06:24:43.787 に答える
0

このシナリオでは、サブクエリを使用する必要はないと思います。DEPRMNTテーブルを直接外部結合することができます。

左外部結合を使用している間、where条件で結合のRHSテーブルの列を使用しないでください。間違った出力が得られます。

于 2012-05-08T06:34:32.630 に答える