- ベストアンサー
SQLで条件にヒットしたレコードより後ろ10件を出したい
データベースはOracleで、SQLでWhere区の条件にヒットしたレコードと、そのレコードより後ろ10件のレコードも抽出したい場合何か良い方法ありますか? 例.商品マスタがあって、商品CD=1111で検索した場合は、商品CDが1111より後ろ10件のレコードも抽出したい。 商品CDは連番になっていない部分もあります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
SELECT * FROM (SELECT "商品CD", ... FROM table1 WHERE "商品CD" >= 1111 ORDER BY "商品CD") WHERE ROWNUM <= 10 ROWNUMが振られるのはORDER BYの前です。大小の比較ができるのは数値のみなので、商品CDが文字列の場合、他の方法を探す必要があります。 Oracle9i SQLリファレンス P2-86 参照 ~以下引用~ 同じ問合せでROWNUM にORDER BY 句が続く場合、ORDER BY 句によって行が再び順序付けられます。結果は、行がアクセスされる方法によって異なります。たとえば、ORDER BY 句の指定によってOracle が索引を使用してデータにアクセスする場合、索引なしの場合とは異なる順序で行が取り出されることがあります。そのため、後続の文には前述の例と同じ効果はありません。 SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name; ORDER BY 句を副問合せに埋め込んでROWNUM 条件をトップレベル問合せに置いた場合、行の順序付けの後でROWNUM 条件を強制的に適用させることができます。たとえば、次の問合せは、小さい順から10 個の従業員数を戻します。これは、上位N 番までの問合せと呼ばれることがあります。 SELECT * FROM (SELECT * FROM employees ORDER BY employee_id) WHERE ROWNUM < 11; 前述の例では、ROWNUM 値はトップレベルのSELECT 文の値です。これらの値は、副問合せ内のemployee_id によって行が順序付けられた後で生成されます。
その他の回答 (4)
- DrSumire
- ベストアンサー率39% (264/666)
OracleだとROWNUMを利用するしかないかな???? SELECT Code, Name FROM Item WHERE Code >= 1111 AND ROWNUM <= 10 ORDER BY Code SQL ServerだとTOP関数が利用できるんですけどね。
- peugeot307
- ベストアンサー率22% (29/130)
Oracleですよね? #1の方が書かれてるTop句は使えるのかなぁ・・・? こんな感じでいかがでしょう? select AA,BB from (select AA,BB from test where AA >= '1113') where rownum <=10
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
データベースの中には「順番」は“ありません”ので、「ピンポイントでヒットしたものより後ろ」という抽出はできません。 SELECTで取り出せる順番は、一定しているようですが、内部的なインデックスが変わると、変わります。 商品コードが数値であるという前提で、指定した数値よりも商品コードが大きいレコードから、商品コードの昇順にならべて、先頭から10件取り出す、ということはできます。←過去、いたるところで質問されています
- EEshiba
- ベストアンサー率29% (45/152)
TOP句を使います。詳細は参考URLを。