我有一个主表,我必须从中获取数据。我有一个左外连接,其中字段将匹配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 :(得分: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不在该范围内。
答案 1 :(得分:0)
如果在WHERE子句中加入“AND H.COL3 = A.STATE”,会发生什么?