次のクエリを実行しようとしています。
update list
set li = '6'
where li = '5'
and dn in ( SELECT dn FROM list GROUP BY dn HAVING COUNT(*) < 2000 )
このクエリを実行すると、上記のエラーが発生します。
You can't specify target table 'list' for update in FROM clause
そこで、次のように実行するようにアドバイスしてくれた人からアドバイスを受けました。
START TRANSACTION;
UPDATE list a
INNER JOIN
(
SELECT dn
FROM list
GROUP BY dn
HAVING COUNT(*) < 2000
) b ON a.dn = b.dn
SET a.li = '6'
WHERE a.li = '5';
このコードは実行されます - 問題は決して終わらないことです。ステートメント自体に問題があるのか、それとも 400 万件のレコードが処理されているためなのかはわかりませんが、昨夜寝るときにそのままにしておいて、今朝はまだ終わっていませんでした。また、後付けとして、「START TRANSACTION;」をスローした場合に備えて、これをトランザクションにロールバックしようとしました。これの開始時に。
これはかなり一般的な質問だと思いますが、残念ながら、他の人のクエリを取得して自分のニーズに合わせて調整するほどSQLに精通していません。:p
これらのレコードを更新できるようにするソリューションを教えてくれる人はいますか? とても有難い。