Не могу использовать внутренний запрос

0

Я пытаюсь простой запрос на обновление со следующим синтаксисом:

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 ???
  • 1
    первый шаг: отойти от неявных объединений к явному объединению
  • 0
    Вы должны использовать явные объединения, также вы должны использовать стандарты именования. Что такое cl.cl_s ?
Показать ещё 4 комментария
Теги:

1 ответ

1
Лучший ответ

Вы можете использовать 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню