SQL УДАЛЯЕТ с СОЕДИНЕНИЕМ другую таблицу для ГДЕ условие

Я должен удалить строки из guide_category это не имеет никакого отношения с guide таблица (мертвые отношения).

Вот то, что я хочу сделать, но это, конечно, не работает.

DELETE FROM guide_category AS pgc 
 WHERE pgc.id_guide_category IN (SELECT id_guide_category 
                                   FROM guide_category AS gc
                              LEFT JOIN guide AS g ON g.id_guide = gc.id_guide
                                  WHERE g.title IS NULL)

Ошибка:

Вы не можете указать целевую таблицу 'guide_category' для обновления в ИЗ пункта

70
задан Sam 17 August 2014 в 14:21
поделиться

3 ответа

В связи с проблемами реализации блокировки, MySQL не позволяет ссылаться на соответствующую таблицу с DELETE или UPDATE.

Вам нужно сделать JOIN здесь вместо:

DELETE  gc.*
FROM    guide_category AS gc 
LEFT JOIN
        guide AS g 
ON      g.id_guide = gc.id_guide
WHERE   g.title IS NULL

или просто использовать NOT IN:

DELETE  
FROM    guide_category AS gc 
WHERE   id_guide NOT IN
        (
        SELECT  id_guide
        FROM    guide
        )
106
ответ дан 24 November 2019 в 13:27
поделиться

Я думаю, из вашего описания будет достаточно:

DELETE FROM guide_category 
WHERE id_guide NOT IN (SELECT id_guide FROM guide)

Я предполагаю, что нет никаких ограничений на целостность ссылок в соответствующих таблицах, не так ли?

9
ответ дан 24 November 2019 в 13:27
поделиться

Как насчет:

DELETE guide_category  
  WHERE id_guide_category IN ( 

        SELECT id_guide_category 
          FROM guide_category AS gc
     LEFT JOIN guide AS g 
            ON g.id_guide = gc.id_guide
         WHERE g.title IS NULL

  )
-3
ответ дан 24 November 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: