Oracle Connect By - 最初のレベルの項目を返すだけです
-
13-12-2019 - |
質問
親製品とそのすべての子製品を選択しようとしています。あなたがそうするならば、物の部品(BOM)を爆発させます。これは十分なタスクであるべきですが、私は期待された結果を得ていません。
SELECT LEVEL,
serial_no,
part_no
FROM ifsapp.part_serial_catalog_tab
START WITH serial_no = 'Serial1'
AND part_no = 'ParentPart'
CONNECT BY PRIOR serial_no = superior_serial_no
AND part_no = superior_part_no;
.
次の結果を見ます。
1 Serial1 ParentPart
2 Serial1 ChildPart1
2 Serial2 ChildPart2
.
。しかし、私は最初の行(親)が返されただけです。
注:テーブルにはpart_no / sirial_noの複合キーがあり、この例からわかるように、親は通常、子供の1つからSERIAL_NOを継承します。これらの問題のどちらかが多くの問題を多く複雑にする必要があることはわかりませんが、明らかに何かが間違っています。
クエリがフル階層を掘削しないのはなぜですか?
解決
同僚が私を解決するのを助けました:
SELECT LEVEL,
serial_no,
part_no
FROM ifsapp.part_serial_catalog_tab
START WITH serial_no = 'Serial1'
AND part_no = 'ParentPart'
CONNECT BY PRIOR serial_no = superior_serial_no
AND PRIOR part_no = superior_part_no;
.
私が見たすべての例は単純なキーを持つテーブルを参照してください。このような複合キーを使用すると、はい、両方の列の間に関係を指定する必要がありますが、2番目の前キーワードも必要です。
CONNECT BY PRIOR serial_no = superior_serial_no
AND PRIOR part_no = superior_part_no;
.
私のSQLは構文的に正しくありませんでしたが、私が実行していたと思ったクエリではそうではありませんでした!
他のヒント
私の推測は、これが最初のレコードのみに結果を制限することです。
AND part_no = 'ParentPart'
. 所属していません StackOverflow