2008-11-16 248 views
1

我有一个主表,我必须从中获取数据。我有一个左外连接,其中的字段将匹配40%的时间。然后我有另一个连接,我需要匹配表A中的数据。左外连接(三个表之间的连接)?

这是伪代码中的SQL。此查询不起作用。

- 这是我想要做的部分,但不起作用。 AND H.COL3 = A.STATE ?????

我正在使用IBM DB2。

SELECT DISTINCT 
    APP_NO as app_no, 
    A.STATE as state 
    ... 
    ... Fields 
    ... 
FROM 
    TABLE_A A 
LEFT OUTER JOIN 
    TABLE_B HIST 
ON 
    HIST.COL1 = A.COL1 
, TABLE_C B 
LEFT OUTER JOIN 
    TABLE_D H 
ON 
    H.COL2 = B.COL2 
-- This is the part I want to do but doesn't work. 
AND 
    H.COL3 = A.STATE???? 
WHERE 
    A.BRANCH = 'Data' 
+0

为什么不起作用?你得到什么错误? – Mark 2008-11-16 23:22:15

+0

在DB2中,我收到以下错误。 如果我删除了违规行,那么它的工作原理。 错误:SQL0338N与JOIN运算符或MERGE语句关联的ON子句无效。 SQLSTATE = 42972 (状态:42972,本机代码:FFFFFEAE) – 2008-11-16 23:31:00

+0

请通过此链接。 http://techpint.com/programming/how-sql-joins-works。我已经演示了一个包含脚本的例子。它包含完全相同的情况,你问。 – 2012-01-09 09:38:17

回答

13

我想你可以把它重新写这样的(但我可以读你的说法是错误的)

FROM 
    TABLE_A A LEFT OUTER JOIN TABLE_B HIST ON 
     HIST.COL1 = A.COL1 
    LEFT OUTER JOIN TABLE_D H ON 
     H.COL3 = A.STATE 
    LEFT OUTER JOIN TABLE_C B ON H.COL2 = B.COL2 
WHERE 
    A.BRANCH = 'Data' 

而且,在这个错误状态IBM的DOCO:关联

ON子句JOIN运算符或MERGE语句无效。 说明:

ON子句中的列引用必须只引用处于ON子句范围内的表的列。

所以我可能会错,它看起来像外部联接“H.COL3 = A.STATE”超出了On子句的范围,因为表A不在该范围内的Erronous ON子句。

0

如果在WHERE子句中放置“AND H.COL3 = A.STATE”,会发生什么?