• ベストアンサー

SQLの範囲指定検索の質問です。

金額100円~300円 というデータがそれぞれテーブル(test1)のカラムに pay_under:100 pay_limit:300 という形で入っています。 これを検索画面で 金額:「  」 の中に 100から300の値を入れて検索した場合に 上のデータが抽出されるSQLの書き方を教えてください。 例) 金額:「150」→ 抽出 金額:「300」→ 抽出 金額:「60」 → 抽出されない

  • MySQL
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 周辺条件の指定が無いので、該当の条件のwhere句の一部のみ。  where ? between pay_under and pay_limit としておけば、該当するレコードが抽出できるとおもいます。

s_mac_ts
質問者

補足

なるほど。ありがとうございます。 あと、ここで別の質問をしていいかどうか分かりませんが、 例えば検索画面で 金額:「A」~「B」で検索して 例えば 金額:「80」~「170」 → 抽出 金額:「150」~「280」→ 抽出 金額:「150」~「400」→ 抽出 金額:「50」~「600」 → 抽出 それ以外は抽出されないSQLはどのように書けばいいんでしょうか?

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

意図がよくわからないんですが。 WHERE (BETWEEN A AND B) AND ((A=80 AND B=170) OR (A=150 AND B=280) OR (A=150 AND B=400) OR (A=50 AND B=600)) 的な処理じゃないでしょうか?

関連するQ&A

  • SQLについて質問です。

    今あるテーブル1のカラムA(number型)と 全く同じテーブルにあるカラムB(varchar型)を つなげて (number型) IS (varchar型) A IS B … のように真ん中に『IS』を挟んで データを全て出したいのですが、 SQLの書き方がよくわかりません。 自分では select A ||'(' || IS || ')'|| B from table1 のように書くのでは?と思っていますが、 全く上手くデータをこの形で出すことができません。 このデータを出すためには どういったSQLを書けばよろしいのでしょうか? よろしくお願いします。

  • 作成したSQLの単体テスト【エビデンスの取り方】

    作成したSQLの単体テストをするにあたって、エビデンスの取り方に悩んでおります。 テストケースとしては、 抽出した項目が正しく設定されているか、ホワイトボックスの観点から、 条件に一致する場合、しない場合で期待した値が設定されているか、などです。 抽出したものは50件のレコードで、カラムは15個程度あるとします。 エビデンスは今まではプリントスクリーンで画面キャプチャを取得して、 エクセルに張り付けていました。(SQLを使わないものの単体テスト) そしてインプットとアウトプットのデータを、テストケースのNoに合わせたファイル名にして、 フォルダに格納しておりました。 しかしSQLのテストとなると、どのようにまとめればいいか悩んでおります。 例えばあるカラムが正しい値になっているかというのは、抽出した60件のレコードのうち1レコードをコピーして、エクセルに張り付け、「このカラムのところに○○という値が設定されているため正しい」というようにするのでしょうか。 そうなるとカラムが15個あるので、15個のカラムが正しい値に設定されているかのチェックは 最低でも15個のテストケースが出来上がります。 テストケース(1):カラムAAAの値が○○であること テストケース(2):カラムBBBの値が△であること テストケース(3):カラムCCCの値が□であること    ・    ・    ・ テストケース(15):カラムYYYの値がXであること 1つの1つのテストケースに対して1レコードをコピーして、 「このカラムはこの値になっているから正しい」ということを繰り返すことになるのでしょうか。 そしてインプットとなるデータは、そのデータをDBでつかえるようにインサート文を用意すれば良いのでしょうか。 意味が伝わりにくい文章になってしまいましたが、エビデンスの取り方という点で、 どのように工夫すれば良いのか教えていただきたく、質問致しました。

  • SQLについての質問です

    SQLの質問です。(Oracle) 二つのテーブル T1, T2 に、それぞれ三つのカラム A, B, C があり、A, B の値が同じである行においてT1のCからT2のCへ値をコピーするSQLを教えてほしいです。 以下、そのデータ例です。 テーブル T1 A B C --------- 1 AAA 10 2 BBB 20 3 CCC 30 テーブル T2 A B C --------- 1 AAA 0 2 XXX 0 4 YYY 0 この場合、結果としてテーブル T2は1行目だけがカラム Cの値がT1からコピーされ A B C --------- 1 AAA 10 2 XXX 0 4 YYY 0 としたいです。

  • SQL:TIMESTAMPの期間検索を指定するには?

    教えてください。 SQL文で日付期間の検索をしたいです。 フィールド名:tran_dataの値が、 2004/09/01 ~ 2004/09/03 のデータを検索したい。 データはTIMESTAMPで取得されています。 テーブル名:dat_history 【失敗例】 select * from web.dat_history where tran_date = '2004-08-18' 【エラーメッセージ】 日付値のストリング表記が間違っています。

  • SQLでできますか?

    SQLでできますか? INSERT INTO test (A) VALUES (B)というSQLを発行したいのですが、このSQLのVALUESのBにあたる部分を正規表現的に指定して、一度のクエリで以下のような結果を得たいのです。 1.テーブルhogeのpiyoカラムの値の先頭がappleになっている行を探す。 2.(1.)で抽出した行のidの値をBとする。 例えば、以下のようにです。 ■皆様が回答してくださるSQL文(1クエリで行いたい) ???????????? ■皆様が回答してくださるSQL文と同等の意味を持つSQL群 INSERT INTO test (A) VALUES (100) INSERT INTO test (A) VALUES (101) INSERT INTO test (A) VALUES (102) ■テーブルhoge _____id_____piyo__________created 1. 100 applebanana 2009/01/02 2. 101 apple_12345 2009/01/03 3. 102 appleXXXXXX 2009/01/04 4. 103 bananananan 2009/01/05 5. 104 ringogogogo 2009/01/06 分かりにくい説明ですが、お詳しい方、どうかご回答の程を宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQLでの前検索・後検索

    はじめまして。 SQL初心者です。宜しくお願いします。 使用DBはMSSQL又は、Accessです(テスト中) まず、下のようなテーブルがあります。 (テーブル名 Tabel1) (フィールドは全てstring型) [ Date ][ No ][Data1][Data2] ... [20040808][0001][ 1 ][ 2 ] ... [20040808][0002][ 2 ][ 3 ] ... [20040809][0001][ 3 ][ 4 ] ... 検索キーは[Date]と[No]を使用しています。 そして、例えば、[20040809][0001]を検索し、そのデータの一つ前のデータを取得したい場合、次のようなSQLを使用しました。 SELECT TOP 1 * FROM Table1 WHERE DATE + NO < '200408090001' ORDER BY DATE + NO DESC しかし、この検索は、前データが膨大に存在した場合に(テストでは数万件)、検索時間がかなり長くなるようでした。 もっと良いSQLコマンド、または対処法がありましたら御教授の程宜しくお願い致します。

  • SQL抽出順番

    SQLの質問なんですが 以下のSQLがあるとします。 select カラムA、カラムC from test_table where in ('AAA','BBB','CCC'); ※条件はカラムAの値を使用しています。 結果が AAA 111 BBB 222 CCC 333 と出るとします。 下のように条件を変えたとき where in ('BBB','CCC','AAA'); BBB 222 CCC 333 AAA 111 と抽出と変わるようにしたいのですが、 (in句の左から順番にレコードが抽出したいです) 何か良い方法はありますでしょうか? rowid順で出力されてしまうのでしょうか? 以上です。 よろしくお願いします。

  • SQL・・・分かりません。

    SQLの勉強をしています。 仕事の研修で習っているのですが、基礎的なものを学習しましたが 応用したパターンが全く理解ができません。 例としまして ・AテーブルとBテーブルを結合して、データを抽出する ・Aテーブルに存在しているのに、Bテーブルに存在していないデータも抽出する ・しかし、Aテーブルに存在していないのに、Bテーブルに存在しているはデータは抽出しない ☆抽出方法に二パターン存在する 1つ目も全く見当つかずです。ヒントでよいので教えていただけたらと思います。 意味が分からなかったらすみません。何を描き足したらよいか教えて下さい。 宜しくお願いしたします。

  • SQL 完全に一致したデータを検索抽出

    SQLのテーブルから完全に一致したデータを抽出するにはどうすればよいでしょうか。 仮に、dayとweatherの2つのカラムでテーブルを作成 <?php /* 検索フォーム */ ?> <form action = "index.php" method="post">           <table> <tbody> <tr> <th>月</th> <th>天気</th> </tr> <tr> <td><input type="text" name="day"></td> <td><input type="text" name="weather"></td> </tr> </tbody> </table> <input type="submit" name="submit" value="検索"> </form> <?php /* 検索 */ ?> <?php ~略~(SQLを呼び出す) $pdo = connect(); $st = $pdo->query("SELECT * FROM table WHERE day LIKE '%" . $_POST["day"] . "%' ); $word = $st->fetchAll(); ?> とします。 カラム「day」の中に「2」「12」「25」のデータが入っていたとします。 この場合、検索フォームで「2」と入力して検索すると 「2」「12」「25」全てのデータが抽出されます。 そうではなく、「2」のデータだけが抽出されるにはどうしたらよいでしょうか? 検索フォームを作る時は、上記のLIKEを使ったものしか知らないので、困っております。 何卒よろしくお願いします。

    • ベストアンサー
    • MySQL
  • oracle(SQL)のHINT指定について

    性能問題について対応しています。 約2000万件のマスタと付随する各テーブルを結合して、検索条件に一致するデータを抽出するSQLを開発していますが、これらのパターン(曖昧検索:前方一致)において、前述の2000万件のマスタが駆動表となり、且つフルスキャンが走るものがあり、改善策を検討しています。 つきましては、HINT指定で駆動表を強制的に各テーブルに変更する方法(SQLのHINT指定内容)についてお教え願います。  →曖昧検索条件にもっとも絞られる対象のテーブルを駆動表とし、マスタテーブルはその駆動表とプライマリーキーで結合した形でアクセス(フルスキャンを避ける)ような実行計画となるSQLに改善をしようとしています。 以上です。