人に聞けない痔の悩み、これでスッキリ >>

はじめて参加します。
SQL初心者の古屋と申します。

絞り込み検索をしたいのですが、先に進まず困っています。
どうぞアドバイスをよろしくお願いします。

あるテーブルから1回目の検索条件でヒットしたものを表示させる。
次に、その中から2回目の検索条件を入力して、結果を表示させる。

(ポイントは、一度検索した結果を出してから、次の検索条件を入力させたい)

この絞り込みを何回でもやりたいのです。

一時テーブルも試したのですが、検索する回数分一時テーブルが必要になるのではだめだと思い、
断念しました。

テーブル値関数を使ったら良さそうだと思ったのですが、能力不足のため先に進まず困っています。

どうかアドバイスをよろしくお願いします。

環境は、Windows 2000 Serverで、SQL Server 2000を使用しています。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

No.2の返答についてのコメントです。



>本当にド素人の質問で申し訳ないのですが、一般的なWebの絞り込み検索って、
>(絞り込み検索に限らず、検索について)
>SQLでストアドプロシージャとかを作って実行させるのではなく、Webで表示
>させるほうのアプリケーションで 書くものなのでしょうか?

作りたいのはWebアプリケーションですか。
ということは、SQLの検索結果をWebに表示する仕組みが必要ですので、
やはり別の言語(ASPとかPHPとかJava)が必要でしょう。

検索結果をWebに出力して、その結果をユーザがまた検索できるようにする
プログラムを別言語で開発することになるのでしょうか。
    • good
    • 0
この回答へのお礼

cse_riさん、回答ありがとうございます。

WEBアプリケーションの方で、AND検索を使うことによって、絞り込み検索は実現したようです。

私のイメージでは、SQLの方でストアドプロシージャなどを使って検索を実行させ、受け取った結果をWEBで表示させるものだと思っていたのですが、
WEBアプリケーションの方で、検索させる方が一般的なのですね。

>やはり別の言語(ASPとかPHPとかJava)が必要でしょう。

そういう知識がないと、SQLだけ勉強していてもあまり使えないということなのでしょうか。
へこんできたけど、頑張ります。

SQLのメーリングリストにも投げていたのですが、ここまで答えて下さる方はいませんでした。
丁寧で、とても親切な回答をありがとうございました。

お礼日時:2001/08/23 09:08

対話式に検索するのであれば、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なので、基本的に列の名前なんかは合わせておく
必要があります。
 
ご参考までに。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

>対話式に検索するのであれば、cse_riさんのおっ
>しゃる通り、SQLというより4GLなどのツールで
>解決する問題だと思います。

4GLについて調べてみたいと思います。
親テーブルとか子テーブルとかはなく、1つのテーブルから検索をかけたいと思っています。

1回目
select *
from emp
where empno=123
これを表示させる

2回目
select *
from emp
where empno=123 and name='John'
これを表示させる

どんどんANDでつなげていけばいいのでしょうが、
前回の検索条件を記憶させておいて、次の検索に受け渡すには、どのようにしたらいいのでしょうか。
変数を使うのでしょうか。

お礼日時:2001/08/22 08:58

追加のコメントです。



>あるテーブルから1回目の検索条件でヒットしたものを表示させる。
>次に、その中から2回目の検索条件を入力して、結果を表示させる。

結果を1回表示したいということですか。
SQLの副問い合わせでは中間の結果が表示されないからNGですね。

やはりSQL単独で実現させるより、別の言語の力が必要では
ないかと思います。(VBでもJavaでも何でもいいですが)
    • good
    • 0
この回答へのお礼

>やはりSQL単独で実現させるより、別の言語の力が必要では
>ないかと思います。(VBでもJavaでも何でもいいですが)

やっぱりそういうことになりますか。

本当にド素人の質問で申し訳ないのですが、一般的なWebの絞り込み検索って、(絞り込み検索に限らず、検索について)
SQLでストアドプロシージャとかを作って実行させるのではなく、Webで表示させるほうのアプリケーションで
書くものなのでしょうか?

言っていることが合っているのかどうかさえ怪しいのですが、教えていただけると嬉しいです。

お礼日時:2001/08/22 08:48

検索結果をベースに別の検索をしたいということですね。


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が得意)を
#組み合わせて、実現する内容ですね。
    • good
    • 0
この回答へのお礼

即レス本当にありがとうございます。

テーブル自体は1つしかないのですが、そういう場合でも副問い合せってできるのでしょうか。

補足で回答いただいているように、一回目の検索結果を一度表示させたいと考えています。

本当に知識不足で申し訳ないのですが、4GL(PowerBuilderが得意)って初めて知りました。
どういうものなのか調べてみます。

お礼日時:2001/08/22 08:37

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q複数の条件での絞り込み検索の仕方

PostgreSQLで複数の条件での絞り込み検索をしたいのです。

テーブルには
発売日、商品名、入荷日
があります。
例えば
発売日が2007年5月1日から5月5日で、商品名に「○○」もしくは「××」もしくは「△△」が含まれており、入荷日が一番新しいもの
という条件で検索したいのです。

発売日だけの絞込みならBetweenですし、商品名だけならor、入荷日の最新だったらmaxを使えば個別には検索できるのですが、これをまとめて一行でやるにはどうしたらよいのかわかりません。
それぞれでandでつなげてみましたが、orの条件がうまく反映されず、一個目の○○だけが検索に引っかかってる状態です。
××や△△もひっかかるようにするにはどう記述したらよいのでしょうか。

Aベストアンサー

データ件数がどのくらいあるのかは分かりませんが、ユニークなキーもなく、likeの任意一致をorでつなぐという方法は、性能を出せませんよ?

select *
from t1
where 入荷日 in(
select max(入荷日)
from t1
where 発売日 between '2007-05-01' and '2007-05-05'
and (商品名 like '%○○%' or 商品名 like '%××%' or 商品名 like '%△△%')
)
and 発売日 between '2007-05-01' and '2007-05-05'
and (商品名 like '%○○%' or 商品名 like '%××%' or 商品名 like '%△△%')

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

Qの中にDBから持ってきたデータを反映させたい

urizakaです。
現在、Jbuilder+SQL-Serverでプログラムを作っているのですが、そのなかで
SELECTタグで選択できるデータはDBから持ってきたものとし、尚且つそのタグ
部分に表示される初期値がDBから持ってきたものとしたいのですが、これは
どのようにすればよいのでしょうか?
(DBデータ)
 データベーステーブル名:m_Auth
 フィールド名  code_auth name_auth
1 責任者
          2 リーダー
         3 一般メンバー

 データベーステーブル名:m_staff
 フィールド名  code_staff name code_auth
1 urizaka 1
2 fukutome 2
3 fujiwara 3
4 isezaki 3

(JSPソースコードよりSELECT部分のみ抜粋)
  <SELECT name = "s_code_auth">
<%
int i;
 /** tantoushaallbeanはこのJSPで使うメソッドが入ったBeanファイルです**/
for( i = 0; i < tantoushaallbean.getcode_auth().size(); i++ ){
out.println("<option value=\"" +
/** 下記はcode_authを全て持ってくるメソッドです**/
tantoushaallbean.getcode_auth().elementAt(i) + "\">" +
/** 下記はname_authを全て持ってくるメソッドです**/
tantoushaallbean.getnameauth().elementAt(i) + "</option>" );
}
%>
</SELECT>

現在では、SELECTタグで選択できるデータはDBから持ってきたものが表示
されますが、初期状態はDB「m_staff」のcode_authがどの値であろうと、
code_authが1の責任者になっている状態です。
 すみませんが、上記の件について方法をご存知の方がいらっしゃったら
ぜひ宜しくお願いします。

urizakaです。
現在、Jbuilder+SQL-Serverでプログラムを作っているのですが、そのなかで
SELECTタグで選択できるデータはDBから持ってきたものとし、尚且つそのタグ
部分に表示される初期値がDBから持ってきたものとしたいのですが、これは
どのようにすればよいのでしょうか?
(DBデータ)
 データベーステーブル名:m_Auth
 フィールド名  code_auth name_auth
1 責任者
          2 リーダー
         3 一般メンバー

...続きを読む

Aベストアンサー

こんにちは。
intをStringに変換。お好きな方法でどうぞ。
・String s = "" + int;
・String s = Integer.toString(int);
・String s = String.valueOf(int);

Stringをintに変換。
・int i = Integer.parseInt(String);

ちなみにintとIntegerは異なるものですのでご注意下さい。

QJSPでデータ一覧表示

JSP+Bean+Servletで作っています。

BeanでDB接続、データを取得して、
それをJSPで一覧表示として表示させたいのですが、
どのタグを使えばいいのでしょうか。
また、その場合、タグは、Servletとか
Beanでかく必要がありますか。


たとえば、今、DBに30個データがある場合、
JSPでそれをTABLEタグを使って
一覧表示させますよね。

でもJSP側では、<TR><TD></TD></TR>の
データをいくつセットできるか、っていう
数がきまってますよね。てことは、
ServletとかBeanでHTMLのタグをうって
表示させないといけないんですか???


やりたいことは、BeanとかServletで
タグは書かずに、JSPでパラメータだけ
受け取って、その数だけデータを
表示させたいんです。
(JSPだけでタグをかいて、パラメータで
わたってきたデータを表示させたい。)

そういうことってできますか??
・・・説明がうまく出来てないかとは思うのですが
よろしくお願いします。

JSP+Bean+Servletで作っています。

BeanでDB接続、データを取得して、
それをJSPで一覧表示として表示させたいのですが、
どのタグを使えばいいのでしょうか。
また、その場合、タグは、Servletとか
Beanでかく必要がありますか。


たとえば、今、DBに30個データがある場合、
JSPでそれをTABLEタグを使って
一覧表示させますよね。

でもJSP側では、<TR><TD></TD></TR>の
データをいくつセットできるか、っていう
数がきまってますよね。てことは、
ServletとかBeanでHTMLのタグをうって
表...続きを読む

Aベストアンサー

どもども^^

例えば、JSPが受け取ったデータ(Stringの配列やら、HashTableやら)を
ループを使って表示させればいいのでは??

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<table>
<%
for(int i=0; i < 結果.length; i++){
%>
<tr>
<td><%= 結果[i] %></td>
</tr>
<%
}
%>
</table>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

こんな感じでHTMLのタグをJAVAのforループの中にほりこんで
やれば、出来ると思うけど、だめ??

がんばってください。
わかりにくい説明だったら、ごめんね。


人気Q&Aランキング