2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

つぶやきTwitter

無料ブログはココログ

« ひとり忘年会 | トップページ | レイトン教授と悪魔の箱 第1章~夢の超特急 モレントリー急行~(前編) »

2007年12月 7日 (金)

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においてデータ順序は神のみぞ知るのです。たまには仕事の内容も載せないとねっ(^-^;

« ひとり忘年会 | トップページ | レイトン教授と悪魔の箱 第1章~夢の超特急 モレントリー急行~(前編) »

仕事」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/199028/17273230

この記事へのトラックバック一覧です: ORDER BY で ROWNUM = 1:

« ひとり忘年会 | トップページ | レイトン教授と悪魔の箱 第1章~夢の超特急 モレントリー急行~(前編) »