Java 如何创建select查询以获取树结构db表中任何特定节点的所有子节点

Java 如何创建select查询以获取树结构db表中任何特定节点的所有子节点,java,mysql,sql,jakarta-ee,qsqlquery,Java,Mysql,Sql,Jakarta Ee,Qsqlquery,我的树结构是 我创建的数据库表是 如何创建select查询以获取树结构db表中任何特定节点的所有子节点 例如,我传递superior_emp_id=1,然后它返回{2,3,4,5,6,7}您可以在这里使用嵌套查询和集合 select * from employee where superior_emp_id = @emp_id union all select * from employee where superior_emp_id in (select emp_id

我的树结构是

我创建的数据库表是

如何创建select查询以获取树结构db表中任何特定节点的所有子节点


例如,我传递superior_emp_id=1,然后它返回{2,3,4,5,6,7}

您可以在这里使用嵌套查询和集合

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)
您可以尝试以下查询以获取根节点的子节点:

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

让我知道它是否工作正常

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的childnodes,您必须再次执行服务器调用(类似于延迟加载)。 希望这就是你要找的


我认为您不能用一条sql语句来实现这一点。我将尝试实现一个递归函数,如果有更多的child并附加它们,该函数将查询一组给定的id。 普罗萨:

函数列表getChilds(int[]id) { List returnValue=new ArrayList(); 如果(ids.length=0) 返回值; foreach int-id:ids { //构建sql以获取childs并执行它 int[]childidsfromsql=em.createQuery(“…”).getResultList();。。 returnValue.addAll(getChilds(childidsfromsql)) } 返回值; }
为什么如果你通过1,那么你会得到
{2,3,4,5,6,7}
你之间有什么关系?java baba-你介意让我知道这是否对你有效吗?试着只使用List,不要从int数组转换到List xD我希望你能理解这个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;
}