Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL DELETE FROM com subconsulta como condição


Para outros que acham que essa pergunta está tentando excluir enquanto usa uma subconsulta, deixo este exemplo para ser mais esperto que o MySQL (mesmo que algumas pessoas pareçam pensar que isso não pode ser feito):
DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM tableE
             WHERE arg = 1 AND foo = 'bar');

vai te dar um erro:
ERROR 1093 (HY000): You can't specify target table 'e' for update in FROM clause

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

vai funcionar bem:
Query OK, 1 row affected (3.91 sec)

Envolva sua subconsulta em uma subconsulta adicional (aqui chamada x) e o MySQL fará com prazer o que você pedir.