我正在尝试执行以下查询,但无法正常工作。 请检查sqlfiddle以获得有关问题的详细信息。
查询:
update entity_permission
set permissions = REPLACE(permissions,
concat(",",
select id
from menus
where url='user_rate_list'
),
'')
where id=0;
说明:
一个table1具有field1,其中的值像1,2,3,4,5,7,8,我想在某些地方用空白代替它。我知道现在concat的问题不适用于子查询。但我认为它必须以另一种方式起作用。
那么可以使用单个查询来实现吗?
分享一些好的建议。
答案 0 :(得分:1)
Group_concat()
函数从menus
表url = 'user_rate_list'
中的逗号分隔的字符串中获取ID。 entity_permission
一起Derived Table
表。Replace()
函数来更新值。请尝试以下操作:
UPDATE entity_permission AS ep
CROSS JOIN (SELECT CONCAT(',',GROUP_CONCAT(id)) AS ids
FROM menus
WHERE url = 'user_rate_list') AS m2
SET ep.permissions = REPLACE(ep.permissions, m2.ids, '')
WHERE ep.id = 0
答案 1 :(得分:0)
尝试此查询:
update table1 set field1 = REPLACE(field1,(select GROUP_CONCAT(id SEPARATOR ',') from table2 where module_url='project1/user_list'),'') where type=0;
编辑答案:
假设:
a = (select GROUP_CONCAT(id SEPARATOR ',') from table2 where module_url='project1/user_list')
然后您可以使用if条件,如下所示,它涵盖了4个条件:
update table1 set
field1 = if(field1 like concat('%,', a, ',%'),
REPLACE(field1,concat(',',a,','),''),
if(field1 like concat('%,', a),
REPLACE(field1,concat(',',a),''),
if(field1 like concat(a, ',%'),
REPLACE(field1,concat(a,','),''),
REPLACE(field1,concat(a,','),'')
)
)
)