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での指定を
すればいいのかもしれませんが、それもよくわからないもので)
すみませんが、宜しくお願いします。
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.code_staff
AND m_proj.approvestaff = d.code_staff
に関して言うと、、m_projテーブル を主表として
m_proj にあるNULLデータも結果を持ってきます。
SQL_SERVER でどのようにSQLを記述するかわからないのですが
ORACLEだと Where句に [+] で各m_staffに「補充」してあげます。
No.5
- 回答日時:
おはようございます。
たびたびっ。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です。
すっかりお世話になってしまいました、ありがとうございます。
でも、おかげで良いツールが作れそうです。
それでは。
No.4
- 回答日時:
補足に対する回答です。
。列名に名前をつけてあげましょう^^
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文ってありますでしょうか?
すみませんが、ご存知でしたら教えてください。
No.3
- 回答日時:
ごめんなさい
where 句 は、
AND で つなげてください (^^;
where a.code_staff=m_project.makestaff
and b.code_staff=m_project.repstaff
この回答への補足
urizakaです
ありがとうございます、おかげで取ってこれました。
しかしながら、この場合通常数字で表示しているmakestaffの名前も、repstaffの名前も「name」ということになってしまい、その名前だけを取ってこようとしても区別がつかなくなってしまいます。
もし、この件に関して方法をご存知でしたら教えてください。(まぁ、「Select *」で全部表示させて、何番目を変数Xに当てはめるという方法もできなくはないのですが・・・)宜しくお願いします。
No.2ベストアンサー
- 回答日時:
おつかれさまです。
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以降で何か特別な仕組みが必要なのでしょうか?
すみませんが、宜しくお願いします
No.1
- 回答日時:
こんにちは。
お使いの環境にはあまり詳しくはないのですが、こんな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はσ(^^)もよく分かりません)
ではでは・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名が可変の動的SQLをフ...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
【SQL】他テーブルに含まれる値...
-
sqlに記述できない文字
-
エラーを起こす方法
-
PostgreSQLのtimestamp型で時間...
-
UPDATEで既存のレコードに文字...
-
timestampのデータはどのように...
-
truncate tableを使って複数の...
-
既存データをINSERT文にして出...
-
データ無し時は空白行にしたい...
-
オラクルのUPDATEで複数テーブル
-
テーブル名が可変の場合のクエ...
-
2つの列からの最大値取得
-
timestamp が空のデータを除い...
-
Accessの構成をコピーしたい
-
Accessで今日から5日後
-
データ削除とSQL*Loaderでのイ...
-
SQLサーバに対するSQL文で抽出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名が可変の動的SQLをフ...
-
CPRM decrypterのエラーコード...
-
オシロスコープYOKOGAWA DL708...
-
実行時エラー:2517 プロシージ...
-
Oracl[10g]の SQL文について(No.8)
-
Activation codeとは
-
定義域関数の抽出と連結表示に...
-
selectの書き方を教えてください
-
★★PL/SQLにてTBL内容をCS...
-
SQLでTableが作れないlol
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
テーブル名が可変の場合のクエ...
-
PostgreSQLのtimestamp型で時間...
-
UPDATEで既存のレコードに文字...
-
pandasでsqlite3にテーブル作成...
-
timestampのデータはどのように...
-
オラクルのUPDATEで複数テーブル
おすすめ情報