ORDER BY で ROWNUM = 1
Oracleでソートした結果の1件目が欲しいからといって、こんなSQLを書く輩はおらんか~っ。
SELECT
*
FROM
TABLE
WHERE
ROWNUM = 1
ORDER BY
COLUMN
;
この場合はROWNUMで順序付けされた後に、ORDER BYによってソートされるので、期待値が得られません。(昔、コレをOracleのバグだと騒いだ輩を知ってます。( ゚д゚)マニュアルヨメ)
正しくは下記のとおり、インラインビューを使うことで解決できる。Webアプリでよくある”10件から20件目"も下記の応用で出来る。
SELECT
*
FROM
(
SELECT
COLUMN
FROM
TABLE
ORDER BY
COLUMN
)
WHERE
ROWNUM = 1
;
「INSERTされた順番がROWNUMの順番」と勘違いしている人が多い。正しくは、「問合せによって戻される各行について、表や結合処理された行の集合からOracleが行を選択する順序を示す番号を戻します」とマニュアルにもある。
そもそも、RDBMSにおいてデータ順序は神のみぞ知るのです。たまには仕事の内容も載せないとねっ(^-^;
| 固定リンク
「仕事」カテゴリの記事
- しがらみある見積もり(2009.03.09)
- 引継ぎ案件(2008.12.18)
- 感情に走ったメール(2008.10.10)
- 【今更】ケータイの匿名性【あるあ…ねーよw】(2008.07.15)
- やっと終わった‥(2008.07.02)
「日記・コラム・つぶやき」カテゴリの記事
- 【YMO】TongPooを打ち込んでみた【連弾】(2008.03.20)
- DQ3(FC版)/Wiiクリア配信(2011.10.10)
- DQ2(FC版)/Wiiクリア配信(2011.10.09)
- DQ1(FC版)/Wiiクリア配信(2011.10.04)
- FF12クリア配信(2011.09.19)

コメント