我的树结构为
我创建的数据库表是
如何创建select查询以获取树结构db表中任何特定节点的所有子节点。
例如i传递superior_emp_id = 1然后它返回{2,3,4,5,6,7}
答案 0 :(得分:0)
select *
from employee
where superior_emp_id = @emp_id
union all
select *
from employee
where superior_emp_id in (select emp_id
from employee
where superior_emp_id = @emp_id)
答案 1 :(得分:0)
你可以在这里使用嵌套查询和设置,
您可以尝试以下查询来获取根节点的子节点:
select *
from TABLE_NAME
where senior_emp_id in { select emp_id
from TABLE_NAME
where senior_emp_id = 1 || emp_id = 1 }
同样,如果你想让父节点-2的子节点
,你可以在嵌套查询中放置2代替1让我知道它是否运作良好..
答案 2 :(得分:0)
StringBuilder sql = new StringBuilder();
sql.append("SELECT emp_id AS id, ");
sql.append(" emp_name AS employeeName, ");
sql.append(" title AS title, ");
sql.append(" superior_emp_id AS parentId ");
sql.append(" FROM T_NWM_SRVC ");
sql.append(" WHERE superior_emp_id IS NOT NULL ");
sql.append(" AND superior_emp_id =");
sql.append(parentId);
在传递 parentId:1 时,您将检索2,3。为了获得2,3的子节点,您将不得不再次进行服务器调用(延迟加载的种类)。 希望这是你正在寻找的。 p>
答案 3 :(得分:0)
我认为你不能用一个sql语句来做这件事。我会尝试实现一个递归函数,如果有更多的子项并追加它们,它们会查询一组给定的id。 PROSA:
function List<Integer> getChilds(int[] ids)
{
List<Integer> returnValue = new ArrayList();
if(ids.length = 0)
return returnValue;
foreach int id : ids
{
//Build sql to get childs an execute it
int[] childidsfromsql = em.createQuery("...").getResultList();..
returnValue.addAll(getChilds(childidsfromsql))
}
return returnValue;
}