Есть у меня таблица. В таблице есть поле "идентификатор списка рассылки - list_id". Я его хочу поменять для некоторых записей таблицы.
Эти некоторые записи я вычисляю с помощью подзапроса. Короче, должно работать вот так:
UPDATE newsletter.clients_lists cl SET cl.`list_id` = 54
WHERE cl.`id` IN ( SELECT c.`id`
FROM newsletter.clients_lists c INNER JOIN newsletter.snd_users s
ON c.`client_id` = s.`id`
WHERE c.`list_id` = 53 AND s.`email1` like '%yahoo.ca' );
MySQL выпендривается - говорит, нельзя делать FROM и UPDATE одновременно:
You can't specify target table 'cl' for update in FROM clause
Как побороть?
update c
set
`list_id` = 54
from
newsletter.clients_lists c INNER JOIN newsletter.snd_users s ON c.`client_id` = s.`id`
WHERE c.`list_id` = 53 AND s.`email1` like '%yahoo.ca';
update newsletter.clients_lists
set
`list_id` = 54
from
newsletter.clients_lists c INNER JOIN newsletter.snd_users s ON c.`client_id` = s.`id`
WHERE c.`list_id` = 53 AND s.`email1` like '%yahoo.ca';
UPDATE newsletter.clients_lists cl
SET cl.`list_id` = 54
WHERE c1.`list_id` = 53
AND EXISTS (SELECT 1 FROM newsletter.snd_users s
WHERE c1.`client_id` = s.`id`
AND s.`email1` like '%yahoo.ca' );