查询没有孩子的父母

时间:2011-08-01 19:36:36

标签: sql oracle

我有一个菜单表,我很难选择没有孩子的所有父菜单。

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'表示它可能(应该)有孩子,可能是子菜单或文件。

这个想法是首先查询所有子菜单,获取他们的菜单代码,然后做一个CONNECT BY PRIOR来计算它的孩子。

以上查询没有预期效果,你们有什么想法吗?

1 个答案:

答案 0 :(得分: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'