试图返回父记录的所有子记录列
我正在寻找解决方案,通过该解决方案我可以获取父记录的所有子记录。 I found a solution that meet my needs as shown here试图返回父记录的所有子记录列
唯一的问题是上述解决方案是连接ID。
当前ResultSet
据逗号与值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列(多个)
现在,他们来逗号分隔。但是,我期待返回特定行的所有列。
你可以使用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));
输出:
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:[email protected])tmp
WHERE ParentID IN (@pv)) a))
UNION ALL
SELECT *
FROM tblReport
WHERE ID = @var
ORDER BY ID;
这种输出简单地通过这个简短的查询提供:
SELECT * from tblreport WHERE FIND_IN_SET(id, '2,3,4');
更重要的是...
使用MySQL 8.0或MariaDB 1 0.2 - 每个都有递归的CTE查询,可方便地查看分层数据库树。
(不要使用CSV,只能使用不同的行。)
我将如何获得逗号分隔值? – Pankaj
我不知道。 _你提到“2,3,4”;那个是从哪里来的? –
您使用的是哪个mysql版本? – Psi
Pankaj,首先我会说编辑问题来改变它,所以现在完全不同的问题不是一个好主意。你总是可以问一个新的问题。至于你目前的问题,不清楚应该如何返回所有子记录的数据? RDBMS是面向行的,并且您实际上想要将几行合并为一行。你能指定那个“超级行”应该是什么样子吗? – SergGr
现在,他们将逗号分开。但是,我期待返回特定行的所有列。请检查此答案为当前状态:https://stackoverflow.com/questions/28363893/mysql-select-recursive-get-all-child-with-multiple-level/28366310#28366310,我期待返回所有列一排而不仅仅是逗号分隔。 – Pankaj