我有下表,想在MariaDB / mySQL中编写一个正确的SQL查询,以返回下面的结果。
"dirID" "parentID" "name"
"1" "0" "C:\"
"2" "1" "\temp"
"3" "1" "\Users"
"4" "3" "\Jon"
dirID name
1 C:
2 C:\temp
3 C:\Users
4 C:\Users\John
到目前为止,我正在尝试使用CASE WHEN,我非常确定这样效率太低,而不是解决问题的方法如下:
cDir是孩子的目录,而pDir是父母:
SELECT
cDir.dirID,
cDir.parentID,
cDir.name AS name,
CASE
WHEN cDir.parentID != 0 THEN ( SELECT pDir.name )
END AS path
FROM dirs AS cDir
JOIN dirs AS pDir ON cDir.parentID = pDir.dirID
所以最后我想做一个CONCAT。
有任何帮助吗? 感谢。
答案 0 :(得分:0)
MariaDB和MySQL没有分层/递归查询,但您可以进行有限级别的查询。
这是一个最多可处理九个级别的查询:
select d1.dirID, concat_ws('', d9.name, d8.name, d7.name,
d6.name, d5.name, d4.name, d3.name, d2.name, d1.name) as name
from dirs d1
left join dirs d2 on d2.dirID=d1.parentID
left join dirs d3 on d3.dirID=d2.parentID
left join dirs d4 on d4.dirID=d3.parentID
left join dirs d5 on d5.dirID=d4.parentID
left join dirs d6 on d6.dirID=d5.parentID
left join dirs d7 on d7.dirID=d6.parentID
left join dirs d8 on d8.dirID=d7.parentID
left join dirs d9 on d9.dirID=d8.parentID