sql字符串分解

来源:百度知道 编辑:UC知道 时间:2024/06/19 09:31:08
我有一个用户表,里面只有两个字段,一个是用户id,一个是角色id,当我添加用户的同时,给他分配角色,角色可以为多个,如角色id=“12,14,15”,这时我要查看这个用户的角色名称,要根据这个角色id去查义,请问,我要怎么在数据库就把角色id分解开并且可以根据这个id来查询这个角色的权限,然再比较角色与角色之间有相同权限的时候再把这个权限忽略掉呢,请问这个sql语句怎么写,小弟对这个不太会,还请各位大虾们多多关照呵。请求各位帮忙解决。急呀!
例如这样:

用户id 角色id
1 12,14,15
2 1,2,4
角色id是用“,”分开的,当我查询的时候怎么把它分解开查询各角色 的名称,然后还要根据角色id查询它们的权限,同时查询它们的权限,如果权限有相同的就让它只显示一个
当然角色肯定是有多个权限的,也是用“,”分开的,这时我要怎么查询它的权限,怎么比较不同角色如果有相同权限的同时怎么让它只显示一个呢?

declare @t table(用户id int,角色id varchar(15))
insert into @t
select 1, '1,14,15'
union all select 2, '1,2,4'

select
用户id
,a= PARSENAME(replace(角色id,',','.'),1)
,b = PARSENAME(replace(角色id,',','.'),2)
,c = PARSENAME(replace(角色id,',','.'),3)
from @t

用户id a b c
----------- ---------- --------- ------
1 15 14 1
2 4 2 1

(所影响的行数为 2 行)
sql server 环境

看了你的问题,我想说一点我的想法。首先这个表设计的不是太合理,既然一个用户拥有多个角色,那就是所谓的“一对多”的关系,那为什么要仅仅建一个表,我的建议是建两个表,一个用户表,一个权限表,其中权限表和用户表是“主-外键”关联。
用户表: 权限表:
用户id 用户姓名 id 用户id 权限id 权限名称
1 张三 1 1 1 一般用户
2 李四 2 1 2 项目经理
3 王五