Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL DELETE FROM mit Unterabfrage als Bedingung

Für andere, die diese Frage beim Löschen finden, während sie eine Unterabfrage verwenden, überlasse ich Ihnen dieses Beispiel zum Überlisten von MySQL (auch wenn einige Leute zu glauben scheinen, dass dies nicht möglich ist):

DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM tableE
             WHERE arg = 1 AND foo = 'bar');

gibt Ihnen einen Fehler:

ERROR 1093 (HY000): You can't specify target table 'e' for update in FROM clause

Aber diese Abfrage:

DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM (SELECT id
                   FROM tableE
                   WHERE arg = 1 AND foo = 'bar') x);

wird gut funktionieren:

Query OK, 1 row affected (3.91 sec)

Verpacken Sie Ihre Unterabfrage in einer zusätzlichen Unterabfrage (hier x genannt) und MySQL wird gerne tun, was Sie verlangen.