sql – 如何在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数据库上运行此查询时收到错误。

您需要在子选择中引用“ON”条件中的字段的“相关id”(“AS SS”thingy)。在子选择中分配的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 != '' 
http://stackoverflow.com/questions/10493512/how-to-write-subquery-inside-the-outer-join-statement

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql – 如何在OUTER JOIN语句中写子查询