Oracle是一个强大的数据库,有很多的函数和语法可以带来很多便利,有些函数和语法在Mysql中有代替的,但是有些没有现成可用的方法,比如Oracle的递归,在Mysql中怎么实现呢?
例子:
Oralce递归:
SELECT s.sysfuncid FROM T_SM_SYSFUNC s WHERE s.sysfuncid != t.sysfuncid START WITH s.sysfuncid = t.sysfuncid connect BY prior s.sysfunccode = s.psysfuncid
Mysql实现递归:
先写个Mysql函数:
DROP FUNCTION IF EXISTS FOO3; CREATE FUNCTION `FOO3` (userid VARCHAR(255)) RETURNS VARCHAR(4000) BEGIN DECLARE sTemp VARCHAR(4000); DECLARE sTempChd VARCHAR(4000); SET sTemp = '$'; SET sTempChd = userid; WHILE sTempChd IS NOT NULL DO SET sTemp = CONCAT(sTemp,',',sTempChd); SELECT GROUP_CONCAT(sysfunccode) INTO sTempChd FROM T_SM_SYSFUNC WHERE FIND_IN_SET(psysfuncid,sTempChd)>0; END WHILE; RETURN sTemp; END
Mysql递归查询:
SELECT s.sysfuncid FROM T_SM_SYSFUNC s WHERE s.sysfuncid != t.sysfuncid AND FIND_IN_SET(s.sysfuncid,FOO3(t.sysfuncid))
这样就实现在Mysql中实现了和Orecle一样的递归查询了。