SELECT A.COMPANY_ID,
A.COMPANY_NAME,
A.COMPPATH,
B.COMPANY_ID AS PARENT_COMPANY_ID,
B.COMPANY_NAME AS PCOMPANY_NAME
FROM (SELECT AA.COMPANY_ID,
AA.COMPANY_NAME,
CONCAT(AA.paths, '/', AA.COMPANY_ID, '/') AS COMPPATH
FROM (SELECT TT.COMPANY_ID,
TT.COMPANY_NAME,
TT.PARENT_COMPANY_ID,
@pathnodes /*'*/:= /*'*/
IF(TT.PARENT_COMPANY_ID = '9999',
'/9999',
CONCAT_WS('/',
IF(LOCATE(CONCAT('|',
TT.PARENT_COMPANY_ID,
':'),
@pathall) > 0,
SUBSTRING_INDEX(SUBSTRING_INDEX(@pathall,
CONCAT('|',
TT.parent_company_id,
':'),
-1),
'|',
1),
@pathnodes),
TT.PARENT_COMPANY_ID)) paths,
@pathall /*'*/:= /*'*/ CONCAT(@pathall,
'|',
TT.COMPANY_ID,
':',
@pathnodes,
'|') pathall
FROM (SELECT O.COMPANY_ID,
O.COMPANY_NAME,
O.PARENT_COMPANY_ID
FROM TEST_TABLE O
ORDER BY O.COMPANY_ID ASC) TT,
(SELECT @pathall /*'*/:= /*'*/ '', //改为@pathall /*'*/:= /*'*/null
@pathnodes /*'*/:= /*'*/ '' ) //改为 @pathnodes /*'*/:= /*'*/null
vv
ORDER BY TT.COMPANY_ID ASC) AA
ORDER BY AA.COMPANY_ID) A,
(SELECT C.COMPANY_ID, C.COMPANY_NAME
FROM TEST_TABLE C
WHERE C.PARENT_COMPANY_ID = '9999') B
WHERE INSTR(RIGHT(A.COMPPATH, 11),
CONCAT('/', B.COMPANY_ID, '/')) > 0
ORDER BY b.COMPANY_ID, A.COMPANY_ID
这个不是完整的sql,整段大的sql传入了3个参数,主要原因是@pathall /’/:= /’/ ‘’ 里面的最后的单引号有问题,应该改为 @pathall /’/:= /’/null就可以了。