• ベストアンサー

SQLでの絞り込み検索

はじめて参加します。 SQL初心者の古屋と申します。 絞り込み検索をしたいのですが、先に進まず困っています。 どうぞアドバイスをよろしくお願いします。 あるテーブルから1回目の検索条件でヒットしたものを表示させる。 次に、その中から2回目の検索条件を入力して、結果を表示させる。 (ポイントは、一度検索した結果を出してから、次の検索条件を入力させたい) この絞り込みを何回でもやりたいのです。 一時テーブルも試したのですが、検索する回数分一時テーブルが必要になるのではだめだと思い、 断念しました。 テーブル値関数を使ったら良さそうだと思ったのですが、能力不足のため先に進まず困っています。 どうかアドバイスをよろしくお願いします。 環境は、Windows 2000 Serverで、SQL Server 2000を使用しています。

noname#2461
noname#2461

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

  • ベストアンサー
  • cse_ri
  • ベストアンサー率29% (74/253)
回答No.4

No.2の返答についてのコメントです。 >本当にド素人の質問で申し訳ないのですが、一般的なWebの絞り込み検索って、 >(絞り込み検索に限らず、検索について) >SQLでストアドプロシージャとかを作って実行させるのではなく、Webで表示 >させるほうのアプリケーションで 書くものなのでしょうか? 作りたいのはWebアプリケーションですか。 ということは、SQLの検索結果をWebに表示する仕組みが必要ですので、 やはり別の言語(ASPとかPHPとかJava)が必要でしょう。 検索結果をWebに出力して、その結果をユーザがまた検索できるようにする プログラムを別言語で開発することになるのでしょうか。

noname#2461
質問者

お礼

cse_riさん、回答ありがとうございます。 WEBアプリケーションの方で、AND検索を使うことによって、絞り込み検索は実現したようです。 私のイメージでは、SQLの方でストアドプロシージャなどを使って検索を実行させ、受け取った結果をWEBで表示させるものだと思っていたのですが、 WEBアプリケーションの方で、検索させる方が一般的なのですね。 >やはり別の言語(ASPとかPHPとかJava)が必要でしょう。 そういう知識がないと、SQLだけ勉強していてもあまり使えないということなのでしょうか。 へこんできたけど、頑張ります。 SQLのメーリングリストにも投げていたのですが、ここまで答えて下さる方はいませんでした。 丁寧で、とても親切な回答をありがとうございました。

その他の回答 (3)

  • kougasha
  • ベストアンサー率32% (34/105)
回答No.3

対話式に検索するのであれば、cse_riさんのおっ しゃる通り、SQLというより4GLなどのツールで 解決する問題だと思います。   本題からは外れるかもしれませんが、もしSQLで やろうとすれば、下記のようなクエリーで1回目の 検索結果と、2回目の検索結果を同時に出力する事 はできます。 |select deptno, '---' "empno", '---' "ename" | from dept where deptno=10 |union |select deptno, empno, ename | from emp | where deptno in (select deptno from dept where deptno=10); |order by deptno,empno,ename;   ちなみに上記はOracle-SQLですが、SQL-Serverでも UNIONは使えるでしょう。 かなり邪道ですかね(笑)   ポイントは、UNION。 1つめのクエリーでは、親の問い合わせのみを記述し、 2つめのクエリーでは、親の問い合わせを副問い合わせに もつ問い合わせを書く、という点です。 UNIONなので、基本的に列の名前なんかは合わせておく 必要があります。   ご参考までに。

noname#2461
質問者

お礼

アドバイスありがとうございます。 >対話式に検索するのであれば、cse_riさんのおっ >しゃる通り、SQLというより4GLなどのツールで >解決する問題だと思います。 4GLについて調べてみたいと思います。 親テーブルとか子テーブルとかはなく、1つのテーブルから検索をかけたいと思っています。 1回目 select * from emp where empno=123 これを表示させる 2回目 select * from emp where empno=123 and name='John' これを表示させる どんどんANDでつなげていけばいいのでしょうが、 前回の検索条件を記憶させておいて、次の検索に受け渡すには、どのようにしたらいいのでしょうか。 変数を使うのでしょうか。

  • cse_ri
  • ベストアンサー率29% (74/253)
回答No.2

追加のコメントです。 >あるテーブルから1回目の検索条件でヒットしたものを表示させる。 >次に、その中から2回目の検索条件を入力して、結果を表示させる。 結果を1回表示したいということですか。 SQLの副問い合わせでは中間の結果が表示されないからNGですね。 やはりSQL単独で実現させるより、別の言語の力が必要では ないかと思います。(VBでもJavaでも何でもいいですが)

noname#2461
質問者

お礼

>やはりSQL単独で実現させるより、別の言語の力が必要では >ないかと思います。(VBでもJavaでも何でもいいですが) やっぱりそういうことになりますか。 本当にド素人の質問で申し訳ないのですが、一般的なWebの絞り込み検索って、(絞り込み検索に限らず、検索について) SQLでストアドプロシージャとかを作って実行させるのではなく、Webで表示させるほうのアプリケーションで 書くものなのでしょうか? 言っていることが合っているのかどうかさえ怪しいのですが、教えていただけると嬉しいです。

  • cse_ri
  • ベストアンサー率29% (74/253)
回答No.1

検索結果をベースに別の検索をしたいということですね。 SQLの副問い合わせを活用すればできそうです。 例えば、 |select deptno, empno, ename | from emp | where deptno in (select deptno from dept where deptno=10); というSQL文は、カッコ内の検索結果を元にして、元のSQL文の検索条件を 設定しています。 上記のSQL文はOracleで試しましたが、基本的な構文ですので MS-SQLServerでも実行可能かと思います。変更が入るにしても 大きくは変わらないと思います。 #PS #私だったら、SQL Onlyではなく4GL(PowerBuilderが得意)を #組み合わせて、実現する内容ですね。

noname#2461
質問者

お礼

即レス本当にありがとうございます。 テーブル自体は1つしかないのですが、そういう場合でも副問い合せってできるのでしょうか。 補足で回答いただいているように、一回目の検索結果を一度表示させたいと考えています。 本当に知識不足で申し訳ないのですが、4GL(PowerBuilderが得意)って初めて知りました。 どういうものなのか調べてみます。

関連するQ&A

  • 検索条件で絞込みの方法を教えて下さい。

    いつもお世話になります。 1千件ほどのデータからいろいろな条件でデータの絞込みをしたいの ですが、初歩的な質問で分かりにくいかもしれませんが、御指導 お願いします。 全国の求人情報サイトのように、 市町村テーブル   企業テーブル  条件テーブル  時給     中京区       花屋      毎日      800円以上 下京区       八百屋     週末だけ    900円以上 上京区       魚屋      平日昼間   1,000円以上 左京区       文房具店    夜専門 右京区       旅館 こんな感じでSQLでテーブルを作っています。 これを検索で絞込みたいのですが、 市町村→企業→条件→時給と全部を絞り込んだり、1つだけの条件 で絞込み方法はわかるのですが、 ある場合は二つだけ、例えば企業と時給で検索をかけたり ある場合は、市町村と条件と時給で検索をかけたりして 絞込み結果を出したいのですが、 値のない項目があるとその項目の該当条件がないために 検索結果がなしになります。 同じページにリンクを貼って、GETで値を渡して、絞込みを したいと思っているのですが、よいお知恵をお願いします。 一番基礎的なところからご指導を頂けるとうれしいです。 こんな感じのHPが理想です。 http://www.jobengine.jp/search.html?p=lsk26

    • ベストアンサー
    • PHP
  • 検索結果に対する絞込み

    お世話になってます。 検索条件で絞り込んだ結果に対して、さらに絞込みをかける方法を教えてください。 検索条件を持ち歩いてもいいのですが、30個近くあるのでセッションを使うことにしたのですが、うまくいきません。 具体的には ID 名前 住所 地区 1 山田 東京 関東  2 佐々木 東京 関東 3 鈴木 埼玉 関東 4 岡田 大阪  関西 最初に「関東」を検索条件に検索すると表示画面に3件表示されます。 セッションテスト1($_SESSION["test1"])には検索後の3件のIDを登録しました。 次に表示画面には検索条件のテキストフィールドがあり、「東京」と入力すると2件表示されます。 具体的にはセッションテスト1に値がセットされていれば $kensaku=$_SESSION["test1"]; $sql="SELECT *from test1 where ID=$kensaku and 住所=東京"; としています。 ここまでは絞込みがうまくいき表示できたのですが 戻るボタンで戻ったとき、「埼玉」といれて検索をかけると、1件表示させたいのですが $_SESSION["test1"]に値がセットされていて、 先ほど「東京」で絞り込んだ結果に検索をかけているので、表示されません。 不動産などのサイトを見るとパラメーターで渡しているのですが、セッションを使う方法ではできませんでしょうか。 わかりにくい文章で申し訳ないのですが、 検索結果に対して、さらに検索を何度もかけるという方法を教えていただければ助かります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 絞込みする時のSQLの書き方

    お世話になります。 絞込みする時のSQLの書き方について教えてください。 具体的には テーブル名tbl01,フィールド名f01,f02とした場合 1.f01もしくはf02にAという文字を含むレコードを抽出。 SQL = "select * from tbl01 where f01 like '%A%' or f02 like '%A%'" 2.続いて、1で抽出したデータからf01もしくはf02にBという文字を含むレコードを抽出するSQL文 SQL = ????? あくまでも、1と2を満たす条件を1つのSQL文で表す方法です。一旦、1の結果をワークテーブルに落とし、そこから2だけのSQL文を実行するわけではありません。

  • エクセルで絞込み検索をしたいのですが。

    エクセルで絞込み検索ができないものかと頑張っているのですが知識が足りずできません。 具体的にどういった動作をさせたいかというと、画像を参照していただき、、 ”お客様登録シート”側にそれぞれ情報を登録して、そのデータを”入力シート”側の赤く塗りつぶしたセルそれぞれに検索結果を表示させたいのです。 黄色く塗りつぶしたセルに検索ワードを入力して検索。 登録年月日、又はフレームNo、もしくはその両方に該当する行の情報を出したい、ということです。 そのような、絞込み検索かつ指定した複数のセルにそれぞれの結果を表示させることは可能なのでしょうか? できれば関数でしたいのですが、マクロでないとできないということであればその方法を教えていただきたいです。 関数は少々かじっている程度。 マクロについてはほぼ初心者です。 文才もなく伝わりにくい説明かと思いますが、わかりやすいご回答をよろしくお願いします。

  • SQLの検索条件について教えてください

    PL/SQLを使い始めた初心者です。 Oracleのバージョンは9iです。 検索時の条件の設定について教えてください。 例えば、2つテーブルがあるとします。 Aテーブル.TESTNoA ------------- 11111 22222 33333 44444 55555 Bテーブル.TESTNoB ------------- 11111 33333 55555 SQL発行時、 WHERE A.TESTNoA = B.TESTNoB で3件のレコードが取得できますよね。 これと同じ結果が欲しいのですが、 検索条件にテーブル型の変数(索引付表?)は使用できるのでしょうか? 変数 TestHen(0) = 11111 TestHen(1) = 33333 TestHen(2) = 55555 こんな感じで設定しておいて、この変数を利用して 一度のSQLで結果を取得したいのです。 できればLIKEを使って検索したいのですが…。 書き方がおかしかったらすみません。 どなたかお知恵をお貸しください。

  • PHPで絞り込み検索結果の件数を表示する

    同じ質問が数多くあるようですが、どうにもうまくいかない為恐縮ですが質問させて頂きました。 私はPHPとMYSQLを使ってホームページを作成しております。 やりたいことは、DBのTBに数百ある情報をPHPで幾つかの条件で絞り込み検索をかけることで、それ自体はできたのですが、何件の結果が抽出されたかを表示することができません。 例:○○件の検索結果が表示されました。 ←こんな感じにしたいのです。 他の質問を参考に以下のように記述をしたのですがどうにもうまくいきません。 $sql ="SELECT*FROM estate WHERE 価格 BETWEEN $price1 AND $price2'"; print 'sql_num_fields( $sql ) . "\n"件の検索結果が表示されました'; どのような点が問題なのか教えていただけますでしょうか? できればソースを教えていただけると助かります。

    • ベストアンサー
    • PHP
  • Mysql 絞り込み検索

    絞り込み検索を実装したいのですがうまくいきません。 ご教授していただければ幸いです。 データは次のとおりです。 テーブル名 「zyoho」 カラム  cityid :tenki_id :kansou 1:1:あつい 2:2:乾燥してる 1:2:乾燥してる 3:3:寒い 以上をセレクトボックスにて絞り込み 「kansou」のデータをだしたいのいです。 一つ目のセレクトボックス ・東京 :cityid 1 ・大阪:cityid 2 ・熊本:cityid 3 二つ目のセレクトボックス ・晴れ:tenki_id1 ・雨:tenki_id2 ・雪:tenki_id3 ・何も選択しなかったらすべて表示。 ・例えば東京だけ選ぶと あつい 乾燥してるの二つのデータ結果。 ・天気だけを選ぶと出てくるいくつかのデータ結果。 ・県、天気を選ぶと絞り込まれたデータ結果。 このように絞り込みたいのですがご教授いただければ幸いです。 お願いいたします。

    • ベストアンサー
    • MySQL
  • データベースの絞り込み検索について

    現在、sqlサーバーにてフォーム上にデータセットして、データを検索するシステムを作成中です。 データの更新や読込、変更等については、うまく動作しているのですが、検索・抽出についてうまくできません。 例えば、コンボボックスを2個配置して、絞り込み検索をかけようとするのですが、1個目でデータバインドされた項目を選択し、2個目では1個目に該当するデータのみを抽出させたいのです。 うまく伝えられないのですが、エクセルの機能でいえばオートフィルタのような動作です。 どのようにすれば良いのでしょうか?

  • SQLで順に絞込みを行う方法

    はじめまして。初めて質問させて頂きます。 現在、システムを作成しています(開発が主業務ではありませんが)。 が、作成途中で詰まっていますので、ご教授願えれば、と思い質問させて頂きます。 いくつかの条件(氏名、内容、レベル)をユーザに入力してもらい、その条件に合致しているデータを抽出するSQLを発行したいのですが、なかなかうまくいきません。 現状では、上記3つの条件を全て入力すれば結果が反映されるのですが、1つずつで絞り込むことができません。 例えば、レベルの選択タブで「2」をユーザが選んだ場合、その条件に合致するあらゆる内容のレベル2の人が出てきてほしいのです。 また、内容で「攻撃」を選んだ場合、攻撃のレベルは関係なく全ての条件が出てきて欲しいのです。 カラオケで選曲をする際に機械を使うと思いますが、あのようなものを作成したいのです。 「ゆず」を検索する際に、「ゆ」を入れた時点で「ゆ」から始まるアーティスト名が抽出され、次に「ず」を入れると抽出件数が減ります。 あのような動作はSQLだけで行えるものなのでしょうか。 ネットで検索してもいまいち理解ができません。 どなたかご教授をお願い致します。

  • 絞り込み後の件数を数えたいのですが・・。

    すいません。今PHPとデータベースを勉強中なのですが、 $st = $pdo->query("SELECT * FROM udon WHERE not abc = '111' limit 5, 10 "); 例えば上記のような絞り込みをした後、絞り込んだ後の数を数えたいのですがそのような 事はできますでしょうか? 絞り込み後の検索結果が5件以上の場合、残りを「次のページ」などのように分けて表示させたいのですがデータベースの絞り込み後の数を数える方法が分からないため先に進めません。 わかる方いましたら教えてください。

    • ベストアンサー
    • MySQL