首页 新闻 搜索 专区 学院

表自关联,求SQL

0
悬赏园豆:10 [已解决问题] 解决于 2015-08-23 15:39

有如下两个表,UserInfo和UserReport 

CREATE TABLE UserInfo(
    UserName varchar(50), 
    ParentList varchar(2000) 
) 

CREATE TABLE UserReport( 
    UserName varchar(50), 
    Money,
     .... 
) 

数据如下,ParentList为上级的列表格式为/UserName/UserName/...

 

现在要查询UserReport 表中用户所有下级(包括子下级,包括本身)的统计数据(SUM)

carl~的主页 carl~ | 初学一级 | 园豆:84
提问于:2015-08-17 19:28
< >
分享
最佳答案
0

SELECT r.UserName,SUM(s.Money) FROM #UserReport r
LEFT JOIN #UserInfo i
ON i.UserName=r.UserName
OR CHARINDEX((SELECT ParentList+UserName+'/' FROM #UserInfo WHERE UserName=r.UserName),i.ParentList)=1
LEFT JOIN #UserReport s
ON s.UserName=i.UserName
GROUP BY r.UserName

 

数据多的话效率一定会很慢很慢。。。

收获园豆:10
小白菜T | 小虾三级 |园豆:564 | 2015-08-20 11:46
其他回答(2)
0

你这样建表,妈妈不会担心服务器受不了吗?

爱编程的大叔 | 园豆:30657 (高人七级) | 2015-08-17 23:55

此话怎讲?

UserInfo表中还有一个外键ParentUserName,是直接上级,UserName是主键

 

表不是我设计的,接手的别人的系统,现在改表结构不太现实

支持(0) 反对(0) carl~ | 园豆:84 (初学一级) | 2015-08-18 10:18

@carl~: 有个ParentUserName好一点点了,如果数据量不多的话,用CTE解决吧。

不知道CTE别问我,问谷歌。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30657 (高人七级) | 2015-08-18 10:27
0

你这样会玩坏的

lb1208 | 园豆:371 (菜鸟二级) | 2015-08-18 10:09

表不是我设计的,接手的别人的系统,现在改表结构不太现实

支持(0) 反对(0) carl~ | 园豆:84 (初学一级) | 2015-08-18 10:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册