使用MySQL,我想在表格中返回一个任务列表,如下所示
ID | ID_TASK_PARENT | TASK_NAME
---------------------------------------------
1 | NULL | task level 1
2 | 1 | task child level 2
3 | 2 | task child level 3
4 | NULL | task level 1
5 | 4 | task child level 2
6 | 5 | task child level 3
7 | 5 | task child level 3
现在,一个查询可以从父任务ID中获取所有叶子任务的ID吗?
示例:
ID = 1 --> result ID 3
ID = 4 --> result ID 6,7
非常感谢你!
答案 0 :(得分:0)
如果您总是有三个级别的嵌套,并且您只想在输出中使用第三级,则可以使用:
select one.id,three.id
from leaves one
join leaves two
on one.id=two.id_task_parent
join leaves three
on two.id = three.id_task_parent;
这假设您的表被调用"离开"。它的工作方式是使用id< - > id_task_parent进行两次自连接。但是如果你想报告二级或三级以下的叶子,它就不会起作用,因为需要单独告知mysql每个连接。
答案 1 :(得分:0)
我很害怕没有好的单一查询做你想做的事。
我建议使用存储过程执行此任务,使用临时表和循环(如果您希望我可以建议这样的过程),或者修改一下任务表。
如果有可能添加ID_TASK_ROOT:
ID | ID_TASK_PARENT | ID_TASK_ROOT | TASK_NAME
-------------------------------------------------------------
1 | NULL | 1 | task level 1
2 | 1 | 1 | task child level 2
3 | 2 | 1 | task child level 3
4 | NULL | 4 | task level 1
5 | 4 | 4 | task child level 2
6 | 5 | 4 | task child level 3
7 | 5 | 4 | task child level 3
然后你可以使用查询:
SELECT t1.ID
FROM tasks t1
LEFT JOIN tasks t2
ON t2.ID_TASK_PARENT = t1.ID
WHERE t2.ID IS NULL
AND t1.ID_TASK_ROOT = ?;