MySQLのUPDATE文でLIMIT句を使用して上位3件のレコードを更新する

MySQLでは、UPDATEでLIMIT句とORDER BYを使用して上位n件のレコードを更新することができます。

更新前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LIMIT句で指定した行数のレコードが更新されます。

構文:
UPDATE テーブル
SET カラム1={expr1|DEFAULT} [, カラム2={expr2|DEFAULT}] ...
[WHERE 条件]
ORDER BY カラム [ASC | DESC]
LIMIT 行数;


例えば、データベースtestのsalesテーブルに10件のレコードが格納されていて、priceの値が低い順に3件のレコードのquantityに1を加算する場合は以下のSQL文になります。

UPDATE test.sales SET quantity = quantity + 1 ORDER BY price LIMIT 3;

実際に実行してみると以下のような結果になります。

更新前のデータ:

mysql> select * from test.sales order by price;
+----------+-------------+---------+----------+
| ordernum | product     | price   | quantity |
+----------+-------------+---------+----------+
|        3 | WII         |    4500 | 1        |
|        5 | PS3         |   10000 | 3        |
|        8 | G-SHOCK     |   12000 | 8        |
|        9 | EXILIM      |   14000 | 7        |
|        1 | PS4         |   20000 | 1        |
|        6 | COOLPIX     |   23000 | 1        |
|        7 | amazon fire |   25000 | 6        |
|       10 | GoPro       |   27000 | 3        |
|        4 | iPhone SE   |   50000 | 4        |
|        2 | iPhone 6    | 1000000 | 2        |
+----------+-------------+---------+----------+
10 rows in set (0.00 sec)

strong>UPDATE文を実行:

mysql> UPDATE test.sales SET quantity = quantity + 1 ORDER BY price LIMIT 3;
Query OK, 3 rows affected (0.03 sec)
Rows matched: 3 Changed: 3 Warnings: 0

更新後のデータ:

mysql> select * from test.sales order by price;
+----------+-------------+---------+----------+
| ordernum | product     | price   | quantity |
+----------+-------------+---------+----------+
|        3 | WII         |    4500 | 2        |
|        5 | PS3         |   10000 | 4        |
|        8 | G-SHOCK     |   12000 | 9        |
|        9 | EXILIM      |   14000 | 7        |
|        1 | PS4         |   20000 | 1        |
|        6 | COOLPIX     |   23000 | 1        |
|        7 | amazon fire |   25000 | 6        |
|       10 | GoPro       |   27000 | 3        |
|        4 | iPhone SE   |   50000 | 4        |
|        2 | iPhone 6    | 1000000 | 2        |
+----------+-------------+---------+----------+
10 rows in set (0.00 sec)

上位3件のレコードだけquantityが1加算されていることがわかると思います。

参考:
MySQLリファレンスマニュアル 13.2.11 UPDATE 構文

[2590] Posted by kagahiro at 2016/09/30 11:43:12
オープン | 1 point | Link (3) | Trackback (1) | Comment (0)

キーワード
MySQL 上位n件 UPDATE 

kagahiroのホームページ


MySQLのUPDATE文でLIMIT句を使用して上位3件のレコードを更新する 関連リンク

SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL)
「先頭からn件のレコード(結果セット)だけ取得する方法が知りたい。」というのは、データベース関連のメーリングなどで以前からよくある質問ですが、SQL ServerやOracle、MySQL、PostgreSQLなどRDBやバージョンによ...
MySQLのDELETE文でLIMIT句を使用して上位3件のレコードを削除する
MySQLでは、DELETE文でLIMIT句とORDER BYを使用して上位n件のレコードを削除することができます。削除前にORDER BYで指定した方法で並べ替えられ(ASCは昇順、DESCは降順、省略した場合は昇順)、LI...
MySQLのINSERT ... SELECT文でLIMIT句を使用して上位3件のレコードをテーブルに追加する
MySQLでは、INSERT ... SELECTを使用することで1つまたは複数のテーブルからレコードをテーブルに追加できます。
また、SELECTでLIMIT句とORDER BYを使用して上位n件のレコードのみテーブルに追加することもで...

トラックバック

トラックバックURL :

Linked from ネット掲示板 - ゴクBBS : SQL質問スレ at 2016/09/30 11:47:32
このスレでは「こういうことをやりたいんだけどSQLでどう書くの?」「こういうSQLを書いたんだけどうまく動きません><」といった質問を受け付けています。SQLはISOによって標準化されていますが、標準を100%実装し...

MySQLのUPDATE文でLIMIT句を使用して上位3件のレコードを更新するへのコメント


詳細の入力フィールドを表示する

おすすめ  (チェックしてコメントすると最新情報に掲載)
コメント :

< 前の投稿      次の投稿 >

アクセスランキング

今日のアクセスランキング TOP 10

  1. [将棋]佐藤和俊六段がまさかの陽動居飛車で橋本崇載八段に勝ち決勝進出 #NHK杯 (5 PV)
  2. [将棋]NHKトーナメントで佐藤康光九段がなめプ角頭歩戦法で佐藤天彦名人を撃破 (3 PV)
  3. FC2動画やYouTubeなどから無料動画(映画やドラマ、アニメ、音楽など)を探す方法 (3 PV)
  4. [将棋]竜王戦第三局は居飛車振り飛車の対向型で丸山忠久九段が勝利 #竜王戦 (3 PV)
  5. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3 PV)
  6. FC2動画 - 映画、ドラマ、アニメなどが無料で見られる動画共有サイト (2 PV)
  7. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (2 PV)
  8. Windows 10の無料アップグレードは2016年7月29日まで、「延長は絶対にない」 (2 PV)
  9. フリーソフトウェア/オープンソースのタブー (2 PV)
  10. [食べ物]七草粥(ななくさがゆ) (1 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3234 PV)
  2. [将棋]NHKトーナメントで佐藤康光九段がなめプ角頭歩戦法で佐藤天彦名人を撃破 (422 PV)
  3. ウェブページを1回だけリロード(再表示)する方法 (270 PV)
  4. [食べ物]七草粥(ななくさがゆ) (156 PV)
  5. FC2動画やYouTubeなどから無料動画(映画やドラマ、アニメ、音楽など)を探す方法 (150 PV)
  6. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (141 PV)
  7. [将棋]佐藤和俊六段がまさかの陽動居飛車で橋本崇載八段に勝ち決勝進出 #NHK杯 (134 PV)
  8. Windows 10の無料アップグレードは2016年7月29日まで、「延長は絶対にない」 (128 PV)
  9. フリーソフトウェア/オープンソースのタブー (123 PV)
  10. 2NN 2ちゃんねるニュース速報+ナビ (120 PV)

アクセス統計

ディレクトリ

関連サイト