sql >> Base de Datos >  >> RDS >> Mysql

MySQL DELETE FROM con subconsulta como condición

Para otros que encuentran esta pregunta buscando eliminar mientras usan una subconsulta, les dejo este ejemplo para burlar a MySQL (incluso si algunas personas parecen pensar que no se puede hacer):

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

te dará un error:

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

Sin embargo, esta consulta:

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

funcionará bien:

Query OK, 1 row affected (3.91 sec)

Envuelva su subconsulta en una subconsulta adicional (aquí llamada x) y MySQL estará feliz de hacer lo que le pida.