mysql-关联多行
我有一张桌子mysql-关联多行,mysql,Mysql,我有一张桌子 SLNO| ID |CHILD ID 1 | 1 | 200 2 | 1 | 250 3 | 250 | 350 4 | 7 | 8 我们可以用一个查询来提取一行中1的所有值,即1200、250、350吗?SLNO是唯一的。首先,您确定需要这样做,将多行折叠为一行吗 最方便的快捷方式是使用分组操作和GROUP\u CONCAT功能 MySQL没有任何本机(内置)分层查询功能 您可以使用如下模式在有限的级别上模拟: SELECT
SLNO| ID |CHILD ID
1 | 1 | 200
2 | 1 | 250
3 | 250 | 350
4 | 7 | 8
我们可以用一个查询来提取一行中1的所有值,即1200、250、350吗?SLNO是唯一的。首先,您确定需要这样做,将多行折叠为一行吗 最方便的快捷方式是使用分组操作和
GROUP\u CONCAT
功能
MySQL没有任何本机(内置)分层查询功能
您可以使用如下模式在有限的级别上模拟:
SELECT GROUP_CONCAT(DISTINCT t.`CHILD_ID` ORDER BY t.`CHILD ID`) AS child_id_list
FROM (
SELECT a1.`CHILD ID`
FROM mytable a1
WHERE a1.`ID` = 1
UNION ALL
SELECT b2.`CHILD ID`
FROM mytable b1
JOIN mytable b2 ON b2.`ID` = b1.`CHILD ID`
WHERE b1.`ID = 1
UNION ALL
SELECT c3.`CHILD ID`
FROM mytable c1
JOIN mytable c2 ON c2.`ID` = c1.`CHILD ID`
JOIN mytable c3 ON c3.`ID` = c2.`CHILD ID`
WHERE c1.`ID` = 1
) t
这种模式可以扩展到有限数量的级别
UNION ALL
SELECT d4.`CHILD ID`
FROM mytable d1
JOIN mytable d2 ON d2.`ID` = d1.`CHILD ID`
JOIN mytable d3 ON d3.`ID` = d2.`CHILD ID`
JOIN mytable d4 ON d4.`ID` = d4.`CHILD ID`
WHERE c1.`ID` = 1
等等
GROUP\u CONCAT
函数返回一列。返回字符串的长度限制为group\u concat\u max\u len
变量(以及max\u allowed\u packet
)。如果字符串的长度超过group\u concat\u max\u len
,则返回字符串时,字符串值将自动(无错误或警告)修剪到允许的最大长度(以字节为单位)
SELECT @@session.group_concat_max_len
要获得真正的递归,对于任何级别,都不能使用本机内置函数在单个MySQL查询中实现。您可以使用MySQL存储过程来实现所需的循环。这能更有效吗,因为我拥有的数据集太大,有20万个ID。您能解释a1吗。
ID
=1