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'
4

2 回答 2

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 指出:

与 JOIN 运算符或 MERGE 语句关联的 ON 子句无效。解释:

ON 子句中的列引用只能引用 ON 子句范围内的表的列。

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

于 2008-11-16T23:46:11.690 回答
0

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

于 2008-11-16T23:34:29.047 回答