35

我想加入两个表 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 数据库上运行此查询时出现错误。

4

2 回答 2

67

您需要子选择上的“相关 id”(“AS SS”东西)来引用“ON”条件下的字段。在子选择中分配的 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 表左外连接。

使用 Left Outer Join 时,不要在 where 条件下使用 join 的 RHS 表中的列,会得到错误的输出

于 2012-05-08T06:34:32.630 回答