【发布时间】:2025-12-04 05:45:01
【问题描述】:
我有一个表,其中每条记录都包含他的父亲,这个层次结构可能最多有 6 个级别。下面的查询搜索名为“DEPARTMENT ABCD”的部门的所有父母。此查询完美运行。
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;
但是,如果我想同时获取多个孩子的父母(在下面的查询中使用 like),我会收到错误:“错误代码: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 Fiddle 中添加了一个示例:http://sqlfiddle.com/#!9/f182fb/3
【问题讨论】:
-
如果我得到你,你想显示项目的层次结构。如果是这样,您可以考虑选择此处所述的递归方法*.com/a/20216006/6435375
-
感谢您的回答。我看到通知的链接和描述的方法以列的形式显示级别,也不支持寻找多个孩子的父母。
-
你会为你的数据创建一个小的小提琴样本,甚至是一个假数据,以便我们测试结果吗? (sqlfiddle.com)
-
嗨豪尔赫。我创建了一个小小提琴样本 (sqlfiddle.com/#!9/f182fb/3)。如果使用上面的查询就能模拟这种情况。提前谢谢!
-
该特定错误消息意味着您正在运行只能返回一行数据的查询,例如你的
@d := (select id ...)。由于您正在进行分配,因此只能分配一个值,而不是一组值。