sql字符串分解
来源:百度知道 编辑:UC知道 时间:2024/06/19 09:31:08
例如这样:
用户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 王五