サブクエリの使用中にこの質問を削除しようとしている他の人のために、MySQLをアウトスマートにするためのこの例を残します(一部の人はそれができないと思っているようですが):
DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
FROM tableE
WHERE arg = 1 AND foo = 'bar');
エラーが発生します:
ERROR 1093 (HY000): You can't specify target table 'e' for update in FROM clause
ただし、このクエリ:
DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
FROM (SELECT id
FROM tableE
WHERE arg = 1 AND foo = 'bar') x);
正常に動作します:
Query OK, 1 row affected (3.91 sec)
サブクエリを追加のサブクエリ(ここではxという名前)でラップすると、MySQLはあなたが求めることを喜んで実行します。