• ベストアンサー

SQLで質問があります。

すみません。初めて質問させて頂きます。 以下のような条件のSQL生成は可能でしょうか。 可能な場合どのようなSQLになるかご教授頂けないでしょうか。 <条件> テーブルA,B,Cで一致する社員コード AND テーブルAの年月日がnull AND テーブルBの区分コードが"01"以外 AND テーブルCの部門コードでテーブルDを検索し 取得した会社コードが"00001" <取得したい項目> テーブルA.社員コード テーブルA.社員氏名 テーブルC.区分コード <テーブルA> 社員コード* 会社コード 年月日 社員氏名 <テーブルB> 社員コード* 会社コード 区分コード <テーブルC> 社員コード* 会社コード 部門コード <テーブルD> 会社コード* 部門コード* *は主キー よろしくお願い致します。

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

  • ベストアンサー
  • cieux
  • ベストアンサー率22% (100/443)
回答No.2

テーブル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.部門コード 部門コードが一致する必要がなければ、最後の行は不要です(が、多分いるような予感)。

ranran_ai
質問者

お礼

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

その他の回答 (3)

  • cieux
  • ベストアンサー率22% (100/443)
回答No.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'

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.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.社員コード

回答No.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";

関連するQ&A