我正在寻找一种解决方案,通过该解决方案可以获得父记录的所有子记录。我找到了一个满足我的需求的解决方案,如下所示 https://stackoverflow.com/a/28366310/726802
唯一的问题是上述解决方案是连接 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 列
我的示例 SQL Fiddle http://sqlfiddle.com/#!9/a0f6c/3
现在,它们以逗号分隔。但是,我期望返回特定行的所有列。
你可以使用CSV
ids 结果如下:
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));
Output:
ID Name ParentID
2 2nd 1
3 3rd 1
4 4th 2
EDIT:
如果您还需要原始行,您可以使用UNION ALL
:
SET @var = 1;
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:=@var)tmp
WHERE ParentID IN (@pv)) a))
UNION ALL
SELECT *
FROM tblReport
WHERE ID = @var
ORDER BY ID;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)