В 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" для обновления в предложении FROM
4 ответа:
из-за проблем с реализацией блокировки,
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 )
Я думаю, что из вашего описания достаточно следующего:
DELETE FROM guide_category WHERE id_guide NOT IN (SELECT id_guide FROM guide)
Я полагаю, что нет никаких ограничений ссылочной целостности на таблицы, там?
попробуйте этот пример сценариев SQL для легкого понимания,
CREATE TABLE TABLE1 (REFNO VARCHAR(10)) CREATE TABLE TABLE2 (REFNO VARCHAR(10)) --TRUNCATE TABLE TABLE1 --TRUNCATE TABLE TABLE2 INSERT INTO TABLE1 SELECT 'TEST_NAME' INSERT INTO TABLE1 SELECT 'KUMAR' INSERT INTO TABLE1 SELECT 'SIVA' INSERT INTO TABLE1 SELECT 'SUSHANT' INSERT INTO TABLE2 SELECT 'KUMAR' INSERT INTO TABLE2 SELECT 'SIVA' INSERT INTO TABLE2 SELECT 'SUSHANT' SELECT * FROM TABLE1 SELECT * FROM TABLE2 DELETE T1 FROM TABLE1 T1 JOIN TABLE2 T2 ON T1.REFNO = T2.REFNO
ваш случай:
DELETE pgc FROM guide_category pgc LEFT JOIN guide g ON g.id_guide = gc.id_guide WHERE g.id_guide IS NULL