MySQLはUpdate, Deleteで自己相関サブクエリが使えない
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 46人 クリック: 938回
- この商品を含むブログ (74件) を見る
気になっていた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とかで対応するしかないのかな。