モノノフ日記

普通の日記です

MySQLはUpdate, Deleteで自己相関サブクエリが使えない

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

気になっていたSQL本を買って読み進めてるんですが早速気になったところがありました。演習問題で自己結合してUPDATEする問題があるんですが、これMySQLだと動きません。

問題例

下のテーブルのrankingを埋める。

Productsテーブル
name price ranking
トマト 100 null
キャベツ 120 null
ネギ 80 null
レタス 100 null
ニンジン 80 null
ピーマン 50 null
UPDATE後のテーブル
name price ranking
キャベツ 120 1
トマト 100 2
レタス 100 2
ネギ 80 4
ニンジン 80 4
ピーマン 50 6
動くと思ってたSQL
UPDATE Products P1 SET ranking = 
(SELECT COUNT(P2.price) + 1 FROM Products P2 WHERE P2.price > P1.price);

公式マニュアルにも自己相関サブクエリ使えないと書いてありました。

Currently, you cannot update a table and select from the same table in a subquery.

http://dev.mysql.com/doc/refman/5.0/en/update.html

マニュアルを読んでると、DELETE文も同様に使えないみたいです。

みなさんどうやってるんでしょ? Temporary Tableに一時的にデータ書いて、そこからUPDATEとかで対応するしかないのかな。