2016-03-25 26 views
0

子行が3レベル下、2レベル下、1レベル下に存在するかどうか確認したいと思います。子行が存在するかどうかを確認するサブクエリを選択してください。

select max(
case 
    (select row from category where relatedRow in (select row from category where relatedRow=?)) is not null then 3 
    (select row from category where relatedRow=?) is not null then 2 
    (select row from category where row=?) is not null then 1 
    else 0 end 
) as level from category 

どうすればこの作品を作成できますか?

このクエリは次のようになります。関連する行(孫)の関連する行を持つ行がある場合は、level = 3になります。関連する行(子)がある場合は、レベル2です。 (親)、親(ゴースト)がないレベル1場合は、レベル0

答えて

0

あなたは自己を使用することができ、期待値、例えば取得するために参加する:nthに行くために、要するに

select c1.row, c2.row, c3.row 
from category c1 left join category c2 on c1.row = c2.related_row 
left join category c3 on c2.row = c3.related_row 
where c1.row = 1; 

をレベル、あなたはテーブルn回自己結合する必要があります。

ここにはSQL Fiddleです。

+0

ご了承ください。私はレベルを取得しようとしています。私は最大3レベルありますが、パラメータが持つ子供のレベルを返すために "ケース"を使いたいと思います。あなたの例では、行= 1の場合、それは子供と孫を持ちます(レベル= 3)。しかし、行= 4の場合、それは存在し、子供と孫はいないので(レベル= 2)。これは私が必要とするものです。子供の最高レベルを表す数字。 –

+0

その場合、次のようなことをする必要があります:http://stackoverflow.com/questions/7631048/connect-by-prior-equivalent-for-mysql –

関連する問題