如何避免循环中的查询

时间:2017-03-07 07:39:35

标签: java sql json oracle

在我的项目中,我配置了如下面的菜单

Menu Group Id Menu ID Parent Menu Id  Menulevel     Name              Action   GroupName
      1         1             1          1        Home                a.htm      mainuser
      2         2             1          1       Report               b.htm      mainuser
      3         3             1          2      Customer              c.htm      mainuser
      4         4             2          2      Merchant              d.htm      mainuser
      5         5             1          2     Corporate              e.htm      mainuser

我想从上表

生成json以下
 {
  "menuname" :  "home",
  "action" :  "    a.htm,
  "hasChild" :  "   true ,
  "childlist" :  [  
  {
     "menuname" :  "Customer",
     "action" :  "c.htm",
     "hasChild" :  "false",
  },

  {
     "menuname" :  "Corporate",
     "action" :  "e.htm",
     "hasChild" :  "false",
  }
  ]
  }

要在json之上生成第一个我正在获取父菜单'然后我使用父ID获取子菜单来循环每个父菜单。

select * from menugroup where GroupName='mainuser' and Menulevel=1
      for each parent menu
        select * from menugroup where GroupName='mainuser' and Precedence=1

他们以任何方式避免第二次查询? 任何帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:0)

你可能会使用connect by

select * from menugroup
start with menu_group_id = parent_group_id
connect by prior menu_group_id = parent_group_id and prior menu_group_id != menu_group_id
where groupname = 'mainuser'.

这会将您的数据作为层次结构授予您,并且可以解决对嵌套循环的需求。