读书人

SQL语句A表中的字段存放B表的ID序列

发布时间: 2013-10-05 17:54:48 作者: rapoo

求一个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;

读书人网 >asp.net

热点推荐