在mysql中递归选择

Har*_*ris 5 mysql sql

我有一个表格如下

TaskID  ParentTaskID
1       1
2       1
3       2
4       2
5       2
10      10
11      11
12      11
13      0
14      14
Run Code Online (Sandbox Code Playgroud)

如果taskid为1,我想得到如下结果

TaskID
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

如果是2那么

Taskid
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

如果它10然后10

意味着我想选择具有taskid = 1的行,其行具有parenttaskid = 1,其中行具有上述选择中的parenttaskid等等........

请使用这个小提琴http://sqlfiddle.com/#!2/9db0c3/6

Jay*_*len 1

MySQL 不支持递归选择。

但是,下面的查询应该可以满足您正在寻找的技巧

SELECT t.TaskID
FROM task AS t
INNER JOIN (
    SELECT DISTINCT a.TaskID 
    FROM task AS a
    INNER JOIN (
        SELECT TaskID 
        FROM task
        WHERE TaskID = 11 OR ParentTaskID = 11
        UNION ALL
        SELECT ParentTaskID
        FROM task
        WHERE TaskID = 11 OR ParentTaskID = 11
    ) AS s ON s.TaskID = a.ParentTaskID
) AS s ON s.TaskID = t.TaskID
Run Code Online (Sandbox Code Playgroud)

  • 我建议你接受我的查询并尝试一下。:) (2认同)