アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

データ処理の件数を制限する

データを1件だけSelectやDeleteしたいときの書き方。

SQLServerMySQLで異なっていたので両方メモ。

-- SQLServer
SELECT TOP(1) * FROM `table` ORDER BY `column`;
DELETE TOP(1) FROM `table` ORDER BY `column`;

-- MySQL
SELECT * FROM `table` ORDER BY `column` LIMIT 1
DELETE FROM `table` ORDER BY `column` LIMIT 1

SQLServerの方はどうやら「TOP 1」という表記でもよい模様?(※未確認)
実務で使っていたときはTOP(1)と書く現場だったのでそう書いてますし、その方が見やすいかなーと思ってますが。

また、「○件目から○件取得」の書き方もあります。
MySQLでは、「LIMIT [開始位置 ※0から], [件数]」でOKです。

-- MySQL
-- 1件目から10件取得
SELECT * FROM `table` ORDER BY `column` LIMIT 0, 10
-- 21件目から10件取得
SELECT * FROM `table` ORDER BY `column` LIMIT 20, 10

そういえばSQLServerでそういう使い方したことないなーと思い調べてみたらこんな記事が。

参考:SQL ServerでSELECT文の取得件数を制限し、任意の件数を取得する - 俺の開発研究所
http://itmemo.net-luck.com/sql-server-select-limit/

ま、まじですか…。場合によってはなかなかに重たそう。