oracle层次结构查询,在父记录处于非活动状态时排除子记录

uajslkp6  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(343)

我有一个表“menuitems\u tbl”,其结构如下(仅显示所需的列)

MENU_ID                 NUMBER
PARENT_MENU_ID          NUMBER
MENU_TITLE              VARCHAR2(30)
ACTIVE                  VARCHAR2(1)        Possible values 'Y' (for active) and 'N' (for inactive)

此表用于创建菜单。我编写了一个层次查询,以获得正确的顺序菜单,我使用层次查询,以确保深度是动态的,我不必改变任何情况下的水平增加;到目前为止,我的问题是:

SELECT MENU_ID 
    , PARENT_MENU_ID 
    , MENU_TITLE 
    , ACTIVE 
FROM MENUITEMS_TBL
CONNECT BY PRIOR MENU_ID = PARENT_MENU_ID
START WITH PARENT_MENU_ID = 0
ORDER SIBLINGS BY PARENT_MENU_ID, MENU_ID

问题是,我不知道如何确保如果任何父项是“n”(活动字段),那么即使它们是“y”,也不应该返回子项。
如果我尝试设置一个条件,排除所有活动的是'n'的,那么它只忽略了父母,并且我有孤儿记录。
我需要任何关于如何达到预期结果的建议。
谢谢和问候,
萨奇布

oxcyiej7

oxcyiej71#

你可以通过添加 WHERE active = 'Y' 条件连同 AND PRIOR ACTIVE = ACTIVE 添加到节的条件 CONNECT BY 条款:

SELECT MENU_ID, PARENT_MENU_ID, MENU_TITLE, ACTIVE 
   FROM MENUITEMS_TBL
  WHERE ACTIVE = 'Y'    
CONNECT BY PRIOR MENU_ID = PARENT_MENU_ID
       AND PRIOR ACTIVE = ACTIVE 
  START WITH PARENT_MENU_ID = 0
  ORDER SIBLINGS BY PARENT_MENU_ID, MENU_ID

相关问题