使用replace和concat更新查询

时间:2018-10-13 08:48:25

标签: mysql mysql-8.0

我正在尝试执行以下查询,但无法正常工作。 请检查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的问题不适用于子查询。但我认为它必须以另一种方式起作用。

那么可以使用单个查询来实现吗?

分享一些好的建议。

2 个答案:

答案 0 :(得分:1)

请尝试以下操作:

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,','),'')
                            )
                      )
              )
相关问题