要对上面三个表进行联合查询,得出以下结果:
UserID UserName RoleName
1 lei 1
3 xiao 1,4
8 test_f 1,2
....
查询字符串如下:
select Distinct(u.UserID),UserName,RoleName from Users as u,Roles as r,R_Users_Roles as rur
where rur.UserID=u.UserID and rur.RoleID=r.RoleID and rur.RecordStatus=0
显示结果:
问题是:
写不出 RoleName 的多条记录相加的sql 语句(查询结果UserID无重复),请求高手帮忙指点一下,先行谢过!
可以做,但是要使用游标以及字符串的函数等,对于不同的数据库自然也有着不同的实现,并且效率并不是很高,如果一个用户对应的角色并不是很多的话,还是建议全部提取后到上层通过程序的方法实现归并
select Distinct(u.UserID),UserName,count(RoleName) from Users as u,Roles as r,R_Users_Roles as rur
group by u.UserID
having rur.UserID=u.UserID and rur.RoleID=r.RoleID and rur.RecordStatus=0
这样试试?
楼主用的是linqpad吧.
如果是sqlserver2005我觉得可以写个函数,输入是userid,返回的是1,3,4这样的rolename字符串,接着在查询中用across apply 对查询的每一行调用此函数,生成楼主需要的结果即可.至于效率问题我还不是确定.
linq的方法肯定也行,大不了加载到内存后用C#进行处理.
没必要非用sql语句拼出来,还是数据取出来,在程序中拼比较好。
哎,来晚了