プロが教える店舗&オフィスのセキュリティ対策術

Access2003でSQLをかいています。
以下のように書いているのですが、
「結合式がサポートされていません」というエラーが発生します。
対応策をご存知の方、お教えいただけますでしょうか。

使用するテーブルは以下の3つです。
・社員テーブル
・所属テーブル
・判定テーブル

それぞれのテーブルの項目は以下のとおりです。

▼ 社員テーブル
-------------------
  個人No
  入社年度

▼ 所属テーブル
-------------------
  個人No
  所属コード

▼ 判定テーブル
-------------------
  所属コード
  入社年度
  判定フラグ

下記のようなSQLを書いています。
---------------------------------------------------------------------
SELECT A.個人No, C.判定フラグ
FROM (社員マスタ A
 LEFT JOIN 所属テーブル B
      ON (A.個人No = B.個人No))
 LEFT JOIN 判定テーブル C
      ON (B.所属コード = C.所属コード AND A.入社年度 = C.入社年度)
---------------------------------------------------------------------

最終行の「AND A.入社年度 = C.入社年度」がなければ、SQLは実行できますが
入社年度で条件を絞れないので正しい結果になりません。
LEFT JOIN 句は3テーブル目の条件式で1テーブル目を参照できないということでしょうか?

A 回答 (2件)

> 条件式で1テーブル目を参照できないということでしょうか?



については分かりません。

以下のように変形して、C と結ぶのを 1つにしてみるのはどうでしょうか。
(未検証)


SELECT TA.個人No, C.判定フラグ FROM
(SELECT A.*, B.所属コード FROM 社員マスタ AS A
 LEFT JOIN 所属テーブル AS B
      ON (A.個人No = B.個人No)) AS TA
 LEFT JOIN 判定テーブル AS C
      ON (TA.所属コード = C.所属コード AND TA.入社年度 = C.入社年度)
    • good
    • 0
この回答へのお礼

教えていただいた方法で解決しました!
結合したテーブルを新しい名前で定義して、さらに結合するという感じ…ですよね。
ありがとうございました!!

お礼日時:2009/09/09 15:21

SELECT D.個人No, C.判定フラグ


FROM [select a.個人No, a.入社年度, b.所属コード from 社員マスタ A
LEFT JOIN 所属テーブル B
ON (A.個人No = B.個人No)]. as D
LEFT JOIN 判定テーブル C
ON (D.所属コード = C.所属コード AND D.入社年度 = C.入社年度)
ではだめですか?
    • good
    • 1
この回答へのお礼

ご回答いただき、ありがとうございます。
教えていただいた方法でもできました!
[]で囲っている形ははじめて見たので勉強になりました。

お礼日時:2009/09/09 15:24

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A