Я пытаюсь простой запрос на обновление со следующим синтаксисом:
UPDATE cl
SET cl_s="active_"
WHERE id in (
SELECT distinct
c.id
from
cl c,
ac a,
cl_ac ac
where
c.id=ac.cl_id
and
a.id=ac.ac_id
and
c.cl_s="someval"
and
a.ac_no !=""
)
;
Ошибка, которую я получаю: Код ошибки: 1093. Вы не можете указать таблицу назначения для обновления в предложении FROM
Я прочитал сообщения, в которых упоминается, что MySQL не может запускать такой запрос. Я хотел бы получить простой способ реструктурировать такие запросы в структуру, которая работает. Решение, похоже, использует объединения, но я не могу понять концепцию.
Псевдокод был бы полезен, чтобы помочь с пониманием. Что-то вроде
(Main query)
where var in (subquery generating var list)
в
(main query) inner join (subquery generating var list) on var ???
Вы можете использовать JOIN в операциях UPDATE в MySQL
UPDATE cl
JOIN cl_ac ON cl.id = cl_ac.cl_id
JOIN ac ON cl_ac.ac_id = ac.id
SET cl.cl_s = 'active_'
WHERE cl.cl_s = 'someval' AND ac.ac_no != ''
PS: Используйте одиночные кавычки для строковых литералов и литератур даты в SQL. Двойные кавычки могут использоваться для идентификаторов с разделителями, в зависимости от sql_mode.
cl.cl_s
?