首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

SQL语句,A表中的字段存放B表的ID序列,查询A表记录的时候,要查询出B表ID序列所对应的权限名称

2013-10-05 
求一个SQL语句,A表中的字段存放B表的ID序列,查询A表记录的时候,要查询出B表ID序列所对应的权限名称B表结构

求一个SQL语句,A表中的字段存放B表的ID序列,查询A表记录的时候,要查询出B表ID序列所对应的权限名称
B表结构:
ID ClassName
1  系统设置
2  留言管理
3  评论管理

A表结构:
ID UserName BasicPower
1  admin    ,1,2,3,
2  Tom      ,2,3,
3  Jack     ,3,

想要得到这样的结构:

1 admin 系统设置,留言管理,评论管理
2 Tom   留言管理,评论管理
3 Jack  评论管理 sql
[解决办法]
定义一个函数,能够分割basicpower字段的value,并进行替换。然后直接用一条sql语句,诸如:select username,keywordsreplace(basicpower) from A 这样的语句执行即可。
字符串分割函数请参考:http://www.cnblogs.com/jhobo/archive/2007/06/06/773858.aspx
[解决办法]
建议A表结构:
ID UserName BasicPower
1  admin    1
2  admin    2
3  admin    3
4  Tom      2
5  Tom      3
6  Jack     3
更有利于你操作

[解决办法]


create table A(ID int,UserName nvarchar(40),BasicPower nvarchar(100))
insert into A
select 1,'admin',',1,2,3,' union all
select 2,'Tom',',2,3,' union all 
select 3,'Jack',',3,'
select * from A

create table B(ID int,ClassName nvarchar(50))
insert into B
select 1,'系统设置' union all
select 2,'留言管理' union all 
select 3,'评论管理'
select* from B


select id,UserName,
  BasicPower=stuff((select ','+ ClassName from B
             where charindex(rtrim(id)+',',A.BasicPower+',')>0 for xml path('')),1,1,'')
from A group by id,UserName,BasicPower

drop table A;
drop table B;

[解决办法]
select a.id,a.username,
GROUP_CONCAT(DISTINCT classname ORDER BY b.id asc SEPARATOR ",") as basicpower
from a,b where find_in_set(b.ID,a.basicpower) 
group by a.id;

热点排行