обновить запрос заменить и конкат - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь выполнить запрос ниже, но он не работает, как ожидалось.Пожалуйста, отметьте sqlfiddle , чтобы получить подробную информацию о вопросе.

Запрос:

update entity_permission 
set permissions = REPLACE(permissions,
                          concat(",",
                                 select id 
                                 from menus 
                                 where url='user_rate_list'
                                ),
                          '') 
where id=0;

Объяснение:

У таблицы1 есть поле1, в котором такие значения, как 1,2,3,4,5,7,8 и я хотел бы заменить его пробелом в некоторых местах.Я знаю, что проблема с concat не работает с подзапросом.но я думаю, что это должно работать по-другому.

Так можно ли добиться с помощью одного запроса?

Поделитесь хорошим предложением.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Попробуйте выполнить следующее:

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
0 голосов
/ 13 октября 2018

попробуйте этот запрос:

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

тогда вы можете использовать условие, что-то вроде нижекоторый охватывает 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,','),'')
                            )
                      )
              )
...