2012-03-14 9 views
2

親製品とそのすべての子製品を選択しようとしています。もしあなたが望むなら、部品表(BOM)を爆発させてください。これは十分に単純な作業でなければなりませんが、期待した結果が得られません。Oracle CONNECT BY - 最初のレベルの項目のみを返す

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 

..howeverを、私は最初の行だけ(親)を返さ取得しています。

注:このテーブルには、part_no/serial_noの複合キーがあります。この例からわかるように、親は通常、子の1つからserial_noを継承します。これらの問題のどちらかが問題を複雑にするはずだが、明らかに何かが間違っているかどうかはわかりません。

クエリが完全な階層をドリルダウンしないのはなぜですか?

答えて

4

同僚は、ソリューションに私を支援してきました:

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; 

私が見てきたすべての例は、簡単なキーで表を参照してください。このような複合キーを使用すると、はい、私は両方の列の間の関係を指定する必要がありますが、私はまた、第二の従来のキーワードが必要になります。

CONNECT BY PRIOR serial_no = superior_serial_no 
    AND PRIOR part_no   = superior_part_no; 

私のSQLはなく、私は私と思ったクエリに対して、文法的に正しかったです走っていた!

1

これは、結果が最初のレコードのみに限定されていると思います。

AND part_no    = 'ParentPart' 
+1

私はそれを削除すると、実際の親部分と、同じserial_no: '1 Serial1 ParentPart'と' 1 Serial1 ChildPart1'を共有する子部分の2つのレベル1項目を取得します。 – CJM

+0

ありがとう、私はそれを取得します。あなたの最初のクエリと2番目のクエリの違いを見つけるために時間をかけました。 2番目の先行キーワードが見つからなかった... – Rene

+0

np ...私のためにそれに亀裂があるためにありがとう。 – CJM

関連する問題