こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLで質問があります。

すみません。初めて質問させて頂きます。

以下のような条件のSQL生成は可能でしょうか。
可能な場合どのようなSQLになるかご教授頂けないでしょうか。

<条件>
テーブルA,B,Cで一致する社員コード AND
テーブルAの年月日がnull AND
テーブルBの区分コードが"01"以外 AND
テーブルCの部門コードでテーブルDを検索し
取得した会社コードが"00001"

<取得したい項目>
テーブルA.社員コード
テーブルA.社員氏名
テーブルC.区分コード


<テーブルA>
社員コード*
会社コード
年月日
社員氏名

<テーブルB>
社員コード*
会社コード
区分コード

<テーブルC>
社員コード*
会社コード
部門コード

<テーブルD>
会社コード*
部門コード*

*は主キー

よろしくお願い致します。

投稿日時 - 2008-05-15 18:30:20

QNo.4024623

すぐに回答ほしいです

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

テーブルCに会社コードを持っているのにテーブルDを見に行かなくてはいけない理由がいまいちよくわかりませんが、純粋につなげたのでは駄目なんでしょうか?

SELECT テーブルA.社員コード, テーブルA.社員氏名, テーブルC.区分コード
FROM テーブルA, テーブルB, テーブルC, テーブルD
WHERE
 テーブルA.年月日 IS NULL AND
 テーブルB.区分コード <> '01' AND
 テーブルD.会社コード = '00001' AND
 テーブルA.社員コード = テーブルB.社員コード AND
 テーブルA.社員コード = テーブルC.社員コード AND
 テーブルC.会社コード = テーブルD.会社コード AND
 テーブルC.部門コード = テーブルD.部門コード

部門コードが一致する必要がなければ、最後の行は不要です(が、多分いるような予感)。

投稿日時 - 2008-05-15 18:45:08

お礼

cieuxさん

ご回答頂きありがとうございます。
参考にさせて頂きます。

投稿日時 - 2008-05-20 19:23:34

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

No2です。
今のご時勢、InnerJoinで書かないと駄目なんでしょうか。
こちらの書き方はあまり馴染みがないので、細かい文法がおかしいかもしれません。
基本的に、全部絞り込んでいけばいいだけのようなので、等価結合していけばいいと思いますよ。

SELECT テーブルA.社員コード, テーブルA.社員氏名, テーブルC.区分コード
FROM テーブルA
 ((INNER JOIN テーブルB ON テーブルA.社員コード = テーブルB.社員コード)
 INNER JOIN テーブルC ON テーブルA.社員コード = テーブルC.社員コード)
 INNER JOIN テーブルD ON テーブルC.会社コード = テーブルD.会社コード
  AND テーブルC.部門コード = テーブルD.部門コード
WHERE
 テーブルA.年月日 IS NULL AND
 テーブルB.区分コード <> '01' AND
 テーブルD.会社コード = '00001'

投稿日時 - 2008-05-15 18:56:55

ANo.3

思いつきでは
SELECT A.社員コード,A.社員氏名,C.区分コード FROM
(SELECT * FROM テーブルA WHERE 年月日 IS NULL) A,
(SELECT * FROM テーブルB WHERE 区分コード <> '01') B,
(SELECT 社員コード FROM テーブルC X,
 (SELECT 部門コード FROM テーブルD WHERE 会社コード='0001') D
 WHERE X.部門コード=D.部門コード) C
WHERE A.社員コード=B.社員コード
AND A.社員コード=C.社員コード

投稿日時 - 2008-05-15 18:49:50

ANo.1

以下のような感じでいかがですか?

select テーブルA.社員コード,テーブルA.社員氏名,テーブルC.区分コード
from <テーブルA>,<テーブルB>,<テーブルC>,<テーブルD>
where テーブルA.社員コード = テーブルB.社員コード and テーブルB.社員コード = テーブルC.社員コード
and テーブルA.年月日 is null
and テーブルB.区分コード != "01"
and テーブルC.部門コード = テーブルD.部門コード
and テーブルD.部門コード = "00001";

投稿日時 - 2008-05-15 18:41:52

あなたにオススメの質問