- ベストアンサー
SQLで質問があります。
すみません。初めて質問させて頂きます。 以下のような条件のSQL生成は可能でしょうか。 可能な場合どのようなSQLになるかご教授頂けないでしょうか。 <条件> テーブルA,B,Cで一致する社員コード AND テーブルAの年月日がnull AND テーブルBの区分コードが"01"以外 AND テーブルCの部門コードでテーブルDを検索し 取得した会社コードが"00001" <取得したい項目> テーブルA.社員コード テーブルA.社員氏名 テーブルC.区分コード <テーブルA> 社員コード* 会社コード 年月日 社員氏名 <テーブルB> 社員コード* 会社コード 区分コード <テーブルC> 社員コード* 会社コード 部門コード <テーブルD> 会社コード* 部門コード* *は主キー よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
テーブル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.部門コード 部門コードが一致する必要がなければ、最後の行は不要です(が、多分いるような予感)。
その他の回答 (3)
- cieux
- ベストアンサー率22% (100/443)
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'
- nda23
- ベストアンサー率54% (777/1415)
思いつきでは 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.社員コード
- 12qwerasdf
- ベストアンサー率31% (49/157)
以下のような感じでいかがですか? 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";
お礼
cieuxさん ご回答頂きありがとうございます。 参考にさせて頂きます。