Ich muss Zeilen aus guide_category
Löschen, die keine Beziehung zur Tabelle guide
haben (dead relations).
Hier ist, was ich tun möchte, aber es funktioniert natürlich nicht.
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)
Error:
Sie können in der FROM-Klausel keine Zieltabelle 'guide_category' für die Aktualisierung angeben
Aufgrund von Problemen bei der Sperrenimplementierung ist es in MySQL
nicht möglich, die betroffene Tabelle mit DELETE
oder UPDATE
zu referenzieren.
Sie müssen stattdessen hier ein JOIN
erstellen:
DELETE gc.*
FROM guide_category AS gc
LEFT JOIN
guide AS g
ON g.id_guide = gc.id_guide
WHERE g.title IS NULL
oder benutze einfach ein NOT IN
:
DELETE
FROM guide_category AS gc
WHERE id_guide NOT IN
(
SELECT id_guide
FROM guide
)
Ich denke, nach Ihrer Beschreibung würde Folgendes ausreichen:
DELETE FROM guide_category
WHERE id_guide NOT IN (SELECT id_guide FROM guide)
Ich gehe davon aus, dass es keine referenziellen Integritätsbeschränkungen für die betroffenen Tabellen gibt.
Probieren Sie diese Beispiel-SQL-Skripte zum leichteren Verständnis aus.
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
Ihr Fall ist:
DELETE pgc
FROM guide_category pgc
LEFT JOIN guide g
ON g.id_guide = gc.id_guide
WHERE g.id_guide IS NULL