尝试返回父记录的所有子记录列

时间:2017-06-21 21:42:41

标签: mysql

我正在寻找一种解决方案,通过该解决方案,我可以获取父记录的所有子记录。的 I found a solution that meet my needs as shown here

唯一的问题是上述解决方案是连接ID。

当前结果集

ID列以逗号分隔,值为= 2,3,4

预期输出

ID    Name    ParentID
1      1st       null
2      2nd       1
3      3rd       1
4      4th       2

我尝试了以下代码。

SELECT @pv:=
(SELECT * FROM tblreport WHERE ParentID IN (@pv)) AS lv FROM tblreport
JOIN
(SELECT @pv:=2)tmp
WHERE ParentID IN (@pv)

并收到错误消息:操作数应包含1列

My sample SQL Fiddle

2 个答案:

答案 0 :(得分:4)

  

现在,它们以逗号分隔。但是,我希望返回特定行的所有列。

您可以使用"(&(objectCategory=Person)(sAMAccountName=*)(memberOf=cn=entergroup,ou=users,dc=company,dc=com))" ID结果,如:

CSV

<强> DBFiddle Demo

输出:

SELECT *
FROM tblreport
WHERE FIND_IN_SET(ID,(SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
                     SELECT @pv:=(SELECT GROUP_CONCAT(ID SEPARATOR ',') 
                     FROM tblreport WHERE ParentID IN (@pv)) AS lv FROM tblreport
                     JOIN (SELECT @pv:=1)tmp
                       WHERE ParentID IN (@pv)) a));

修改

如果您还需要原始行,则可以使用ID Name ParentID 2 2nd 1 3 3rd 1 4 4th 2

UNION ALL

<强> DBFiddle Demo2

答案 1 :(得分:-1)

这个简短的查询只提供了这个输出:

SELECT * from tblreport WHERE FIND_IN_SET(id, '2,3,4');

更好......

使用MySQL 8.0或MariaDB 10.2 - 每个都有递归的CTE查询,可以方便地深入分析数据库树。

(不要使用CSV,只能使用单独的行。)