我有一个表,其中每个记录包含他的父亲,这个层次可能有多达6个级别。以下查询搜索名为“DEPARTMENT ABCD”的部门的所有家长。此查询完美工作。Mysql - 如何选择所有父母的孩子列表?
SELECT D2.id, D2.name, D2.id_parent
FROM (
SELECT
@d AS _id,
(SELECT @d := id_parent FROM department WHERE id = _id) AS id_parent,
@l := @l + 1 AS level
FROM
(SELECT
@d := (select id from department where name = 'DEPARTMENT ABCD'),
@l := 0
) initial_level,
department D
WHERE @d <> 0
) D1
JOIN department D2 ON D1._id = D2.id
ORDER BY D1.level DESC;
但是,如果我想在同一时间获得超过一个孩子的父母(使用类似下面的查询),我得到的错误:“错误代码:1242子查询返回多个1行”。
查询并显示错误“子查询返回多个1行”:
SELECT D2.id, D2.name, D2.id_parent
FROM (
SELECT
@d AS _id,
(SELECT @d := id_parent FROM department WHERE id = _id) AS id_parent,
@l := @l + 1 AS level
FROM
(SELECT
@d := (select id from department where name like 'DEPARTMENT %A%'),
@l := 0
) initial_level,
department D
WHERE @d <> 0
) D1
JOIN department D2 ON D1._id = D2.id
ORDER BY D1.level DESC;
我怎么能这样做的同时获得超过一个孩子的父母?
我加入SQL小提琴样本:http://sqlfiddle.com/#!9/f182fb/3
如果我得到了你,你要显示项目的层次结构。如果是这样,你可以考虑选择递归的方法,这里描述http://stackoverflow.com/a/20216006/6435375 –
谢谢你的答案。我看到了链接,并且所描述的方法以列的形式显示了级别,并且不支持寻找不止一个孩子的父母。 – David
你会为你的数据创建一个小的小提琴样本,甚至是假数据,所以我们可以测试结果吗? (http://sqlfiddle.com) –