2011-08-01 7 views
1

私はメニューテーブルを持っていますが、私は子なしですべての親メニューを選択するのに苦労しています。子なしの親に照会

SELECT 
CASE 
WHEN (SELECT COUNT(1) children 
     FROM menu 
     WHERE cod_idiom = 'EN' 
     START WITH cod_menu_parent = m1.cod_menu 
     CONNECT BY PRIOR cod_menu = cod_menu_parent) = 0 THEN 
     cod_menu 
END x 
FROM menu m1 
WHERE m1.isSubMenu = 'T' 

* isSubMenu = 'T'は、サブメニューまたはファイルである可能性のある子を持つ可能性があることを意味します。

まず、すべてのサブメニューを照会し、メニューコードを取得してから、子を数えるために前に接続することでした。

上記のクエリには期待された効果がありませんでした。あなたはどんな考えですか?

+1

技術的には、isSubMenuは一般により正規化されたデータベースで悩まされている派生フィールドです。それを取り除くか、それを同期させる(かなりの仕事ではない)ことを余儀なくされるかもしれません。さらに、フィールド名は、関係の反対側に属しているように聞こえる(子フィールドではなく)。フィールドの使用法の説明が正しい場合は、名前を 'hasSubMenu'に変更することを検討してください。 –

答えて

1
SELECT m1.cod_menu 
    FROM menu m1 
    WHERE NOT EXISTS(SELECT NULL 
         FROM MENU m2 
         WHERE m1.cod_menu = m2.cod_menu_parent) 
     AND m1.isSubMenu = 'T' 
+0

ありがとうございます。私は疲れた*一息 – Melladric

関連する問題