2015-02-12 2 views
0

Я хочу обновить таблицу, используя запрос sub в предложении where, но я получил исключение «Вы не можете указать целевую таблицу» catalog_category для обновления в предложении FROM ». Это мой вопрос:Mysql, использующий обновление с подзапросом

update catalog_category set `status` = "inactive" 
where id_catalog_category in ( 
SELECT id_catalog_category 
     FROM catalog_category t1 where (SELECT status 
     FROM catalog_category t2 
     WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt 
     ORDER BY t2.rgt-t2.lft ASC limit 1) = 'active' and status = 'inherited_inactive') 

Есть ли способ исправить эту ошибку?

+0

возможно дубликат: http://stackoverflow.com/questions/4268416/sql-update-with-sub-query-that-references-the-same- table-in-mysql – starko

+0

@starko Я не думаю, что это дубликат вопроса, так как здесь это та же таблица в подзапросе и обновлении, тогда как в вашем вопросе оба являются разными. – Sirko

+0

Я бы просто разделил его на 2 запроса: один, чтобы выбрать идентификаторы, а затем второй для обновления. – Sirko

ответ

1

Используйте следующие SQL для обновления: -

update catalog_category cc 
     join (SELECT id_catalog_category 
       FROM catalog_category t1 where (SELECT status 
       FROM catalog_category t2 
       WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt 
       ORDER BY t2.rgt-t2.lft ASC limit 1) = 'active' and status = 'inherited_inactive') tmp 
    on cc.id_catalog_category = tmp.id_catalog_category 
    set cc.`status` = "inactive" 
+0

Спасибо, Пунеет! Ваш запрос работал, но мне нужно отключить безопасный режим mysql для его запуска – Randy

Смежные вопросы