我正在寻找一种解决方案,通过该解决方案,我可以获得父记录的所有子记录。我找到了一个满足我需求的解决方案,如下所示
唯一的问题是上述解决方案是连接 ID。
当前结果集
它是用逗号分隔的 ID 列,值 = 2,3,4
预期产出
ID Name ParentID
1 1st null
2 2nd 1
3 3rd 1
4 4th 2
Run Code Online (Sandbox Code Playgroud)
我试过下面的代码。
SELECT @pv:=
(SELECT * FROM tblreport WHERE ParentID IN (@pv)) AS lv FROM tblreport
JOIN
(SELECT @pv:=2)tmp
WHERE ParentID IN (@pv)
Run Code Online (Sandbox Code Playgroud)
并收到一条错误消息:操作数应包含 1 列
现在,它们以逗号分隔。但是,我希望返回特定行的所有列。
您可以使用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));
Run Code Online (Sandbox Code Playgroud)
ID Name ParentID
2 2nd 1
3 3rd 1
4 4th 2
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您还需要原始行,您可以使用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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1297 次 |
最近记录: |