-1

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

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

分享一些好的建议。

4

2 回答 2

1
  • 您可以使用Group_concat()函数从menus表 where获取逗号分隔字符串中的 id(s) url = 'user_rate_list'
  • 现在,将这个派生表与表交叉连接entity_permission
  • 利用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
于 2018-10-13T13:00:34.273 回答
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,','),'')
                            )
                      )
              )
于 2018-10-13T12:55:37.870 回答