OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

複数検索について

  • すぐに回答を!
  • 質問No.106054
  • 閲覧数47
  • ありがとう数2
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 32% (45/139)

urizakaです。
現在、SQL-ServerとJBUilderでJSPの開発を行っているのですが、そのときに
一覧表を表示させるために、次のようなテーブルを作りました

テーブル名:m_project
code_proj projname makestaff  repstaff workstaff approvestaff
1      開発    1       2      1      2
2      購買    3       1      2      3
3      支援    2       3      1      2

テーブル名:m_staff
code_staff   name
1        瓜坂 幸四郎
2        小野里 圭吾
3        藤原 二三四

そして、m_projectの値を検索してその結果をVector変数へと代入して、
結果として表示したいのですが、この時に現在は数字で入力されている
makestaff、repstaff、workstaff、approvestaffをテーブル名の
nameのcode_staffに対応する名前にしたいのですが、何かいい手は
ないでしょうか?
 SELECT * FROM m_staff,m_project where m_project.makestaff=m_staff.code_staff
 で結合するところまではわかるのですが、Where以降で、この場合
複数の条件を指定する方法がわからないもので・・・(unionでの指定を
すればいいのかもしれませんが、それもよくわからないもので)
 すみませんが、宜しくお願いします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル13

ベストアンサー率 40% (404/988)

おつかれさまです。

from 句を
FROM m_staff,
   m_project

FROM m_staff a,
m_staff b,
   m_projec

として、where句を
a.code_staff=m_project.makestaff
b.code_staff=m_project.repstaff

として、Select句で、
a.name,
b.name

を取ります。
abcd・・・(テーブルに仮の名前を付けて、同じテーブル同士で結合する。)とすれば、良いのではないでしょうか
補足コメント
urizaka

お礼率 32% (45/139)

urizakaです。
ご返答ありがとうございます。

さて、上記に従い

「select *
from m_staff a,m_staff b,m_project
where a.code_staff=m_project.repstaff,
b.code_staff=m_project.makestaff」

と入力してみたのですが、

「サーバー : メッセージ 170、レベル 15、状態 1、行 3
行 3: ',' の近くに無効な構文があります。」
とエラーが出てきてしまいました。
 やはり、Where以降で何か特別な仕組みが必要なのでしょうか?
すみませんが、宜しくお願いします
投稿日時 - 2001-07-18 16:30:09
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル10

ベストアンサー率 47% (77/163)

こんにちは。 お使いの環境にはあまり詳しくはないのですが、こんなSQLではだめですか? ---------------------------------------------------- SELECT A.code_proj,A.projname,B.name,C.name,D.name,E.name FROM m_project A, m_staff B, m_ ...続きを読む
こんにちは。
お使いの環境にはあまり詳しくはないのですが、こんなSQLではだめですか?
----------------------------------------------------
SELECT A.code_proj,A.projname,B.name,C.name,D.name,E.name
FROM m_project A,
m_staff B,
m_staff C,
m_staff D,
m_staff E
WHERE
A.makestaff = B.code_staff AND
A.repstaff = C.code_staff AND
A.workstaff = D.code_staff AND
A.approvestaff = E.code_staff;
----------------------------------------------------
要はm_staffテーブルがあたかも複数あるように見せかければ良いような気がします。
(UNIONはσ(^^)もよく分かりません)
ではでは・・・
  • 回答No.3
レベル13

ベストアンサー率 40% (404/988)

ごめんなさい where 句 は、 AND で つなげてください (^^; where a.code_staff=m_project.makestaff and b.code_staff=m_project.repstaff ...続きを読む
ごめんなさい

where 句 は、
AND で つなげてください (^^;


where a.code_staff=m_project.makestaff
and b.code_staff=m_project.repstaff
補足コメント
urizaka

お礼率 32% (45/139)

urizakaです
ありがとうございます、おかげで取ってこれました。

しかしながら、この場合通常数字で表示しているmakestaffの名前も、repstaffの名前も「name」ということになってしまい、その名前だけを取ってこようとしても区別がつかなくなってしまいます。
 もし、この件に関して方法をご存知でしたら教えてください。(まぁ、「Select *」で全部表示させて、何番目を変数Xに当てはめるという方法もできなくはないのですが・・・)宜しくお願いします。
投稿日時 - 2001-07-18 18:24:45
  • 回答No.4

補足に対する回答です。。 列名に名前をつけてあげましょう^^ select … , a.name A, b.name B, c.name C とすればできますよ。 それぞれ A = a.name B = b.name C = c.name という概念で格納されていきます。 どうでしょう? ...続きを読む
補足に対する回答です。。
列名に名前をつけてあげましょう^^

select … , a.name A, b.name B, c.name C
とすればできますよ。

それぞれ
A = a.name
B = b.name
C = c.name という概念で格納されていきます。

どうでしょう?
補足コメント
urizaka

お礼率 32% (45/139)

urizakaです。
ありがとうございます、おかげでできました。
さて、これとはぜんぜん違う質問になるかもしれませんが、このようにして作ったSQL文

select * from m_proj,m_staff a,m_staff b,m_staff c,m_staff d where
m_proj.makestaff = a.code_staff AND m_proj.repstaff = b.code_staff AND
m_proj.workstaff = c.code_staff AND m_proj.approvestaff = d.code_staff

を使って
以下のようなデータを検索した場合

code_proj projname makestaff  repstaff workstaff approvestaff
1      開発    1       2      1      2
2      購買    3                   
3      支援    2       3      1      2

 repstaff,workstaff,approvestaffにNull値が許容されているにも関わらず
検索される結果は1と3だけになってしまいます。で、nullの代わりにm_staffに
存在しない値0を代入するようにプログラムを組みましたが、やはり結果は同じ
でした。
もちろん、code_staffの何番かを、nullの時のためのダミーにしておいて
入力がnullだった場合はそのダミーを入力するようにすればいいとは思うのですが、できればこの場合もnullでも結果を持ってくるようにしたいと思います。
そんなSQL文ってありますでしょうか?
 すみませんが、ご存知でしたら教えてください。
投稿日時 - 2001-07-19 10:29:11
  • 回答No.5
レベル13

ベストアンサー率 40% (404/988)

おはようございます。たびたびっ。 NULLを結果として含む時、結果にでてこないと言うことですね。 外部結合をしましょう。 where 句で指定します。 where m_proj.makestaff = a.code_staff AND m_proj.repstaff = b.code_staff AND m_proj.workstaff = c.code_s ...続きを読む
おはようございます。たびたびっ。

NULLを結果として含む時、結果にでてこないと言うことですね。
外部結合をしましょう。
where 句で指定します。

where m_proj.makestaff = a.code_staff
AND m_proj.repstaff = b.code_staff
AND m_proj.workstaff = c.code_staff
AND m_proj.approvestaff = d.code_staff


●SQLSERVER/Access
where m_proj.makestaff* = a.code_staff
AND m_proj.repstaff* = b.code_staff
AND m_proj.workstaff* = c.code_staff
AND m_proj.approvestaff*= d.code_staff
●ORACLE
where m_proj.makestaff = a.code_staff(+)
AND m_proj.repstaff = b.code_staff(+)
AND m_proj.workstaff = c.code_staff(+)
AND m_proj.approvestaff = d.code_staff(+)

としてみてください。
お礼コメント
urizaka

お礼率 32% (45/139)

urizakaです。
すっかりお世話になってしまいました、ありがとうございます。
でも、おかげで良いツールが作れそうです。
それでは。
投稿日時 - 2001-07-19 15:51:04
  • 回答No.6

補足に対する回答です。 属に言う outer結合というもので実現可能です select * from m_proj,m_staff a,m_staff b,m_staff c,m_staff d where m_proj.makestaff = a.code_staff AND m_proj.repstaff = b.code_staff AND m_proj.workstaff = c ...続きを読む
補足に対する回答です。
属に言う outer結合というもので実現可能です

select *
from m_proj,m_staff a,m_staff b,m_staff c,m_staff d
where m_proj.makestaff = a.code_staff
AND m_proj.repstaff = b.code_staff
AND m_proj.workstaff = c.code_staff
AND m_proj.approvestaff = d.code_staff

に関して言うと、、m_projテーブル を主表として
m_proj にあるNULLデータも結果を持ってきます。

SQL_SERVER でどのようにSQLを記述するかわからないのですが
ORACLEだと Where句に [+] で各m_staffに「補充」してあげます。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ