当前位置: 代码迷 >> Sql Server >> 效率最高的SQL语句
  详细解决方案

效率最高的SQL语句

热度:59   发布时间:2016-04-24 09:50:34.0
求一个效率最高的SQL语句
表结构如下:

用户名   上级用户ID
userid         rid

整个表有3-4级的上下级关系(无法确定)

现在已知某几个userid,求SQL语句扫出所有已知userid的下级(包括下级的下级 和 下级的下级的下级)
------解决思路----------------------

-- 大概语法是这样,你自己改一下吧,这是查 ID = 100 的所有下级。
with mt as 
(
select * from mytable where id = 100
union all
select * from mytable x , mt where mt.id = x.rid
)
select * from mt 


------解决思路----------------------
递归虽然理论上效率不算很高,不过只有3-4级还是非常快的
WITH tree AS (
    SELECT userid, rid FROM userTable WHERE rid IN (1,3,5,7) --已知某几个userid
    UNION ALL
    SELECT u.userid, u.rid
      FROM tree t
      JOIN userTable u
        ON u.rid = t.userid
)
SELECT * FROM tree

------解决思路----------------------
;WITH TBCTE AS(
    SELECT A.userid,A.rid,B.userid RU FROM TABLENAME A LEFT JOIN TABLENAME B ON A.rid=B.userid
)
,CTE AS(
    SELECT *,CAST(userid AS VARCHAR(8000))[PATH] FROM TBCTE WHERE RU IS NULL
    UNION ALL
    SELECT A.*,B.[PATH]+'-'+CAST(A.userid AS VARCHAR(8000)) FROM TBCTE A JOIN CTE B ON A.rid=B.userid
)
SELECT A.* FROM CTE A LEFT JOIN CTE B ON A.[PATH]LIKE B.[PATH]+'-%'WHERE B.userid IN(1,2,3)

上面小调如下
TABLENAME换成你的表名
  相关解决方案