QA@IT

【ORA-01799】 SQL書換えてみました

2559 PV

以下のSQL文を含むストアドプロシジャをコンパイルしたところ、タイトルのエラーとなりました。

そのため、当サイトの以前の質問や幾つかのサイトをもとにSQL文を外部結合の副問い合わせなしの表記に変えてみました。

知識がないため、間違っているかもしれませんが、この形であっているかご教示願います。

--書き換え前

SELECT A.*
FROM T顧客状況事業性個人 A

LEFT JOIN T顧客状況基本 B               
        on A.店番  =  B.店番                
    and A.CIF番号  =  B.CIF番号         

LEFT JOIN TCRDスコア個人M1 C

on A.店番 = SUBSTR(C.債務者番号,4,3)

and A.CIF番号 = SUBSTR(C.債務者番号,7,7)

and C.当年度決算年月 = (SELECT MAX(x.当年度決算年月) FROM TCRDスコア個人M1 x

WHERE x.債務者番号 = C.債務者番号)
LEFT JOIN TCRDスコア個人M2 D

on A.店番 = SUBSTR(D.債務者番号,4,3)

and A.CIF番号 = SUBSTR(D.債務者番号,7,7)

and D.当年度決算年月 = (SELECT MAX(y.当年度決算年月) FROM TCRDスコア個人M2 y

WHERE y.債務者番号 = D.債務者番号)
LEFT JOIN TCRDスコア個人M4 E

on A.店番 = SUBSTR(E.債務者番号,4,3)

and A.CIF番号 = SUBSTR(E.債務者番号,7,7)

and E.申告年 = (SELECT MAX(z.申告年) FROM TCRDスコア個人M4 z

WHERE z.債務者番号 = E.債務者番号);

--書き換え後

SELECT A.*
FROM T顧客状況事業性個人 A

LEFT JOIN T顧客状況基本 B       
        on A.店番  =  B.店番                                    
    and A.CIF番号  =  B.CIF番号                             

LEFT JOIN TCRDスコア個人M1 C

on A.店番 = SUBSTR(C.債務者番号,4,3)

and A.CIF番号 = SUBSTR(C.債務者番号,7,7)

and not exists (select x.当年度決算年月 FROM TCRDスコア個人M1 x

WHERE A.CIF番号 = SUBSTR(x.債務者番号,7,7)
and C.債務者番号 = x.債務者番号
and C.当年度決算年月 < x.当年度決算年月)

LEFT JOIN TCRDスコア個人M2 D
on A.店番 = SUBSTR(D.債務者番号,4,3)
and A.CIF番号 = SUBSTR(D.債務者番号,7,7)
and not exists (select y.当年度決算年月 FROM TCRDスコア個人M2 y
WHERE A.CIF番号 = SUBSTR(y.債務者番号,7,7)
and D.債務者番号 = y.債務者番号
and D.当年度決算年月 < y.当年度決算年月)

LEFT JOIN TCRDスコア個人M4 E
on A.店番 = SUBSTR(E.債務者番号,4,3)
and A.CIF番号 = SUBSTR(E.債務者番号,7,7)
and not exists (select z.申告年 FROM TCRDスコア個人M4 z
WHERE A.CIF番号 = SUBSTR(z.債務者番号,7,7)
and z.債務者番号 = E.債務者番号
and E.申告年 < z.申告年);

  • 機能の検証を行いたいのであれば、取得可能なケース・取得不可能なケースのデータをテスト環境上に構築するべきです。外部結合の説明を受けたいならば、より機能が分かりやすいサンプルを提示したほうが回答を得られやすいです。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。