アプリ版:「スタンプのみでお礼する」機能のリリースについて

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での指定を
すればいいのかもしれませんが、それもよくわからないもので)
 すみませんが、宜しくお願いします。

A 回答 (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.code_staff
AND m_proj.approvestaff = d.code_staff

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

SQL_SERVER でどのようにSQLを記述するかわからないのですが
ORACLEだと Where句に [+] で各m_staffに「補充」してあげます。
    • good
    • 0

おはようございます。

たびたびっ。

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(+)

としてみてください。
    • good
    • 0
この回答へのお礼

urizakaです。
すっかりお世話になってしまいました、ありがとうございます。
でも、おかげで良いツールが作れそうです。
それでは。

お礼日時:2001/07/19 15:51

補足に対する回答です。


列名に名前をつけてあげましょう^^

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

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

どうでしょう?

この回答への補足

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
    • good
    • 0

ごめんなさい



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


where a.code_staff=m_project.makestaff
and b.code_staff=m_project.repstaff

この回答への補足

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

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

補足日時:2001/07/18 18:24
    • good
    • 0

おつかれさまです。



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です。
ご返答ありがとうございます。

さて、上記に従い

「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
    • good
    • 0

こんにちは。


お使いの環境にはあまり詳しくはないのですが、こんな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はσ(^^)もよく分かりません)
ではでは・・・
    • good
    • 0

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