如何从列中搜索IN条件?

时间:2018-10-06 05:10:32

标签: sql db2

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

角色

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

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,P005,P001更改为此“ ​​P009”,“ P011”,“ P012”,“在SQL中使用CONCAT的P010','P006','P005','P001'。

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')

但是结果返回零。

但是当我碰巧有这个代码时,

SELECT
    ROLE_ID,
    ROLE_NAME
FROM
    ROLES
WHERE
    ROLE_ID IN ('P009','P011','P012','P010','P006','P005','P001')

结果输出显示

结果

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 

是否有可能直接从列中获取输出?

2 个答案:

答案 0 :(得分:1)

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 :(得分:0)

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

选择     ROLE_ID,     ROLE_NAME 从     角色在STRING_SPLIT 哪里     ROLE_ID IN(从STRING_SPLIT中选择值(选择前1个ALLOWABLE_ROLES,其中USER_ID ='A001'))

但是,对于MS2016之前的版本,您可以使用How to split a comma-separated value to columns

中描述的功能