首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从列中搜索条件?

如何从列中搜索条件?
EN

Stack Overflow用户
提问于 2018-10-06 05:10:32
回答 2查看 58关注 0票数 0

我创建了两个表,并将其命名为ACCESS_CONTROL和角色。每个ACCESS_CONTROL用户可以在ALLOWABLE_ROLES中使用逗号分隔多个角色。

角色

代码语言:javascript
运行
复制
ROLE_ID     ROLE_NAME   
P001        ROLE 1      
P002        ROLE 2      
P003        ROLE 3      
P004        ROLE 4      
P005        ROLE 5      
P006        ROLE 6      
P007        ROLE 7      
P008        ROLE 8      
P009        ROLE 9      
P010        ROLE 10     
P011        ROLE 11     
P012        ROLE 12 

ACCESS_CONTROL

代码语言:javascript
运行
复制
USER_ID     USER        ALLOWABLE_ROLES                 
A001        MASTER      P009,P011,P012,P010,P006,P005,P001      
A002        ADMIN 1     P010,P011,P012,P003,P004,P006,P008      
A003        ADMIN 2     P011,P012,P010,P006             
A005        ADMIN 3     P011,P012,P003,P007,P006,P009,P001,P005     
A006        USER 1      P011,P012,P001,P006             
A007        USER 2      P010,P011,P012,P003,P006,P001,P000,P002 

我试图通过将列ALLOWABLE_ROLES值从P009、P011、P012、P010、P006、P005、P001更改为‘P 009’、‘P 011’、‘P 012’、‘P 010’、‘P 006’、‘P 005’、'P001‘,从而获得用户角色列表。

代码语言:javascript
运行
复制
SELECT
    ROLE_ID,
    ROLE_NAME
FROM
    ROLES
WHERE
    ROLE_ID IN (SELECT CONCAT('''',CONCAT(RTRIM(CHAR(REPLACE(ALLOWABLE_ROLES,',',''','''))),'''')) FROM ACCESS_CONTROL WHERE USER_ID = 'A001')

然而,结果返回零。

但当我碰碰运气的时候,

代码语言:javascript
运行
复制
SELECT
    ROLE_ID,
    ROLE_NAME
FROM
    ROLES
WHERE
    ROLE_ID IN ('P009','P011','P012','P010','P006','P005','P001')

结果输出显示

结果

代码语言:javascript
运行
复制
ROLE_ID     ROLE_NAME   
P001        ROLE 1      
P005        ROLE 5      
P006        ROLE 6      
P009        ROLE 9      
P010        ROLE 10     
P011        ROLE 11     
P012        ROLE 12 

有可能直接从列获得输出吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-06 08:33:41

代码语言:javascript
运行
复制
SELECT R.*
FROM ROLES R
JOIN ACCESS_CONTROL A ON LOCATE(','||R.ROLE_ID||',', ','||A.ALLOWABLE_ROLES||',')<>0
WHERE A.USER_ID = 'A001'

+1给保罗的评论。

票数 1
EN

Stack Overflow用户

发布于 2018-10-06 08:41:15

在MSSQL 2017中,您可以使用STRING_SPLIT函数:

选择ROLE_ID,ROLE_NAME从STRING_SPLIT中的角色中选择ROLE_ID IN (从STRING_SPLIT中选择value (选择USER_ID =‘A001’)的前1 ALLOWABLE_ROLES )

但是,在MS2016之前,您可以使用已在How to split a comma-separated value to columns上描述的函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52675908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档