如何在OUTER JOIN语句中编写子查询

我想join两个表CUSTMR和DEPRMNT。

我需要的是:左外部连接的两个或两个以上的表在子查询中的左外部连接,如下所示:

表格: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数据库上运行此查询时出现错误。

您需要子select上的“相关ID”(“AS SS”thingy)来引用“ON”条件中的字段。 在子select内部分配的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 != '' 

我想你不必在这种情况下使用子查询。你可以直接离开外部joinDEPRMNT表。

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