gpt4 book ai didi

mysql - SQL 子查询返回多于 1 行

转载 作者:行者123 更新时间:2023-11-29 15:27:50 25 4
gpt4 key购买 nike

我正在尝试运行此查询:

 select r.rolekey 
from roles r
where r.rolekey in (select r.rolekey
from roles r
where r.role_name like
(concat('%',
replace ((
select s.rolename
from savroles s
join user_savroles us
on s.rolekey = us.rolekey
where us.userkey = 24),'ROLE_REPONSABLE_RESSOURCE_',''),'%'))) ;

问题:我有表 SAV 角色,其中 SAV 角色名称类似于:ROLE_REPONSABLE_RESSOURCE_SAP_SIAG 或 ROLE_REPONSABLE_RESSOURCE_SAP_CIIAM。我可以为一个用户分配 1 个或多个 SAV 角色。然后我有一个表“角色”,其中角色名称如下:APP_SAP_CIIAM_Z_XX_BASIC、APP_SAP_SIAG_BW_ZU_CT_SIAGBI、ROLE_REPONSABLE_RESSOURCE_SAP_CIIAM。基本上,角色名称包含 SAP_SIAG 或 SAP_CIIAM,这也是 SAV 角色中的字符串。如果用户只有 1 个 SAV 角色,则此查询有效,但当我分配更多角色时,我会收到错误代码 1242 子查询返回超过 1 行。

我可以指出此查询中似乎是一个问题的特定子查询:

选择替换((select s.rolename from savroles s join user_savroles us on s.rolekey = us.rolekey where us.userkey = 24 ),'ROLE_REPONSABLE_RESSOURCE_','');我认为替换不喜欢超过 1 个结果。

我如何克服这个问题 - 我想构建一个 SAV 角色列表,在其上运行替换,以便该列表将仅包含像 SAP_SIAG 这样的纯子字符串,然后我想用 % 连接该字符串,以便可以进行比较到角色。

最佳答案

replace 期望单个值,而不是无界。限制子查询的结果。您使用子查询将过滤器再次连接到主表

select r.rolekey 
from roles r
inner join
(select r.rolekey from roles r
inner join savroles s on r.role_name like concat('%', replace(s.rolename, 'ROLE_REPONSABLE_RESSOURCE_',''), '%')
inner join user_savroles us on s.rolekey = us.rolekey
where us.userkey = 24)
t1 on t1.rolekey = r.rolekey;

关于mysql - SQL 子查询返回多于 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58944645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com