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 句のスコープ内にあるテーブルの列のみを参照する必要があります。

テーブル A がそのスコープ内にないため、外部結合 "H.COL3 = A.STATE" が On 句のスコープ外にある場合、誤った ON 句のように見えます。

于 2008-11-16T23:46:11.690 に答える
0

「AND H.COL3 = A.STATE」を WHERE 句に入れるとどうなりますか?

于 2008-11-16T23:34:29.047 に答える