gpt4 book ai didi

mysql - 试图返回父记录的所有子记录列

转载 作者:可可西里 更新时间:2023-11-01 07:34:09 25 4
gpt4 key购买 nike

我正在寻找一种解决方案,通过它我可以获得父记录的所有子记录。 <强> 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)

并收到一条错误消息:Operand should contain 1 column(s)

My sample SQL Fiddle

最佳答案

Now, they are coming comma separated. But, I am expecting to return all columns of a particular row.

您可以使用 CSV id 结果,例如:

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));

DBFiddle Demo

输出:

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

编辑:

如果您还需要原始行,您可以使用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;

DBFiddle Demo2

关于mysql - 试图返回父记录的所有子记录列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com