如果 parent 处于非活动状态,Oracle 层次结构查询将排除 child 记录

Oracle hierarchy query to exclude child records if parent is inactive

我有一个 table“MENUITEMS_TBL”,其结构如下(仅显示需要的列)

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

此table用于创建菜单。我已经编写了一个层次结构查询来按正确的顺序获取菜单,我已经使用层次结构查询来确保深度是动态的,并且在级别增加的情况下我不必更改任何内容;到目前为止,以下是我的查询:

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

问题是我无法弄清楚如何确保如果任何 parent 是 'N' (活动字段)那么 child 也不应该返回,即使它们是'Y'.

如果我尝试设置一个条件来排除所有活动为 'N' 的条件,那么它只会忽略 parent 并且我有孤立的 child 记录。

需要关于如何实现预期结果的任何建议。

感谢和问候,

萨奇布

您可以通过添加 WHERE active = 'Y' 条件以及添加到 CONNECT BY 子句部分的 AND PRIOR ACTIVE = ACTIVE 条件来完成:

 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