我有一个表“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'的,那么它只忽略了父母,并且我有孤儿记录。
我需要任何关于如何达到预期结果的建议。
谢谢和问候,
萨奇布
1条答案
按热度按时间oxcyiej71#
你可以通过添加
WHERE active = 'Y'
条件连同AND PRIOR ACTIVE = ACTIVE
添加到节的条件CONNECT BY
条款: