人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQL> select QUESTION_ID,seq
from (select rownum as seq,
club_question.QUESTION_ID from club_question
order by QUESTION_ID DESC)
where seq between 1 and 2

QUESTION_ID SEQ
----------- ----------
93 1
92 2

SQL> select QUESTION_ID,seq
from (select rownum as seq,
club_question.* from club_question
order by QUESTION_ID DESC)
where seq between 1 and 2


QUESTION_ID SEQ
----------- ----------
63 2
62 1

何故にclub_question.QUESTION_IDを
club_question.*にするとROWNUMが
おかしくなるのでしょうか??

●質問者: yashio
●カテゴリ:就職・転職 コンピュータ
✍キーワード:as SELECT SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● EPP
●25ポイント

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_tn02.htm

SQL チューニング編2 - SQL 実行計画解析、EXPLAIN、表走査、索引走査 - SAK Streets

回答ではないのでポイントは不要です。

まずDBの種類(SQLを見る限りOracleっぽいですが)とメジャーバージョンを書いてください。そうしないと回答しようがありません。

#補足ですが、rownumの扱いがoracle8までと9以降で変わっています。そのためメジャーバージョンにより挙動が変わります。


可能であれば、提示のURLに従って、各SQLの実行計画を表示してみて下さい。その違いを調べれば原因が判るかもしれません。

見て判らなかったらEXPLAINの結果をここに貼り付けてみるとか....

◎質問者からの返答

Oracleは10.1.3です。宜しくお願いします。


2 ● EPP
●25ポイント

http://fukkey.dyndns.org/pins/ora/010531/31425.html

Oracle

外していたらポイント不要です。


の前に。

>#補足ですが、rownumの扱いがoracle8までと9以降で変わっています。

間違いでした(汗)7までと8以降でした。


Oracle8.1.7(自分の経験では10gも一緒でしょう)では、索引を使ってデータを取り出すか、使わずに取り出すかによってデータの並び順もROWNUMも変化するようですね。


以下のSQLを試してはどうでしょう?

#手元にOracleがないので確認はしていません。


----1a

select QUESTION_ID, rownum as seq

from (select

club_question.QUESTION_ID from club_question

order by QUESTION_ID DESC)

where seq between 1 and 2

----1b

select QUESTION_ID, rownum as seq

from (select

club_question.* from club_question

order by QUESTION_ID DESC)

where seq between 1 and 2

----

これで駄目なら(駄目な気がする)

----2a

select *

from (select QUESTION_ID, rownum as seq

from (select

club_question.QUESTION_ID from club_question

order by QUESTION_ID DESC)

)

where seq between 1 and 2

----2b

select *

from (select QUESTION_ID, rownum as seq

from (select

club_question.* from club_question

order by QUESTION_ID DESC)

)

where seq between 1 and 2

----

http://hamasyou.com/archives/Engineer-Soul/noieeiie.php

技術者の宝石箱 [それはBooks]

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_kj04_2.htm

SQL 問い合わせ - スカラー副問い合わせ、cursor、row_number、over、with - SAK Streets

もしくはOracle9i以降に追加されたrow_number()関数でどうでしょう?


----3a

select QUESTION_ID,seq

from (select row_number() over (order by QUESTION_ID DESC) as seq,

club_question.QUESTION_ID from club_question)

where seq between 1 and 2

----3b

select QUESTION_ID,seq

from (select row_number() over (order by QUESTION_ID DESC) as seq,

club_question.* from club_question)

where seq between 1 and 2

----


※言うまでもないかもしれませんが、もし結果をseq順に並べたいのなら、SQLの最後にORDER BY句を付けてください。こんな感じに。付けないと多分だめです。


select QUESTION_ID, rownum as seq

from (select

club_question.QUESTION_ID from club_question

order by QUESTION_ID DESC)

where seq between 1 and 2

order by seq

◎質問者からの返答

ありがとうございます。

2bを使用して出来ました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ