我想加入两个表CUSTMR和DEPRMNT。
我需要的是:左外连接两个或多个具有子查询的表在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数据库上运行此查询时出现错误。
答案 0 :(得分:64)
您需要在子选择上使用“相关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 != ''
答案 1 :(得分:0)
我认为你不必在这种情况下使用子查询。你可以直接离开外连接DEPRMNT表。
使用Left Outer Join时,不要在where条件中使用连接的RHS表中的列,否则输出错误