将父级和子级值一起列出

时间:2013-09-25 05:11:41

标签: sql oracle

我的表有这个值,其中Menu_id是该特定行的ID,Parent_Menu_id是Id,它告诉父ID该值。

例如,Menu_Id 2的Parent_Menu_Id为NULL,这意味着它没有任何父项,而3有parent_menu_d 2,这意味着3是2的子项。

enter image description here

但是,我面临一个问题,即将所有父值和子值一起显示,这意味着输出应为

Menu_id | Parent_Menu_id
-------------------------
2       |
3       |    2
9       |    2
4       |
5       |    4
6       |    4
7       |
8       |    7

我试过

select menu_id,parent_menu_id from menu_test mt where parent_menu_id=(select menu_id from menu_test where mt.parent_menu_id=menu_id)

但是,在那种情况下,我只会得到子行。

甚至我试过

 select distinct menu_id,parent_menu_id from menu_test CONNECT BY PRIOR menu_id=parent_menu_id order by menu_id,parent_menu_id

仍然存在同样列出的问题

注意:两个输出看起来都相同,但是当你看到menu_id 9时,你会得到差异和我想要的东西。

2 个答案:

答案 0 :(得分:2)

试试这个,

SELECT menu_id, parent_menu_id
  FROM menu_test
START WITH parent_menu_id IS NULL
CONNECT BY PRIOR menu_id = parent_menu_id;

答案 1 :(得分:1)

您只需要将所有数据与id和parent_id一起排序。只需使用order by子句。

     select * from table order by  nvl(Parent_Menu_id,Menu_id),Menu_id;