Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL DELETE FROM avec une sous-requête comme condition

Pour les autres qui trouvent cette question cherchant à supprimer tout en utilisant une sous-requête, je vous laisse cet exemple pour déjouer MySQL (même si certaines personnes semblent penser que cela ne peut pas être fait) :

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

vous donnera une erreur :

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

Cependant cette requête :

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

fonctionnera très bien :

Query OK, 1 row affected (3.91 sec)

Enveloppez votre sous-requête dans une sous-requête supplémentaire (nommée ici x) et MySQL se fera un plaisir de faire ce que vous demandez.