• ベストアンサー

ACCESSでクエリ作成時複数のフィールドを同じマスタ項目から抽出する方法

ACCESSでクエリを作成しています。テーブルは”売上明細”と”社員マスタ”があります。売上明細には”担当者CD”と”加工者CD”というフィールドがあって、それぞれのフィールドが、同じ社員マスタの”社員CD”をキーに”社員名”を抽出したいのですが、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。第一次結合を実行する分割クエリを作成し、SQLステートメントにそのクエリを含めてください」とメッセージが出ます。どこにどのように設定すればいいのでしょうか?優先順位は特にありませんが、最初に設定されている担当者CDを第一次結合とする場合どうすればいいのでしょうか?この第一次・第二次はどのような意味があるのでしょうか?まだVBAは手付かずで、初心者です!これから学習しようとしているところです。よろしくお願いいたします。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

ひとつのテーブルの異なるフィールドが同じテーブルを参照しているわけですね こういう場合はひとつのテーブルを2つのフィールドに結合するのではなく 同じテーブルを別の名前で結合します クエリデザインビューでの操作だと、社員マスタを2回クエリデザインビューに取り込み (2つ目は異なる名前で取り込まれます) 担当者と、加工者に別々に結合します

viva123
質問者

お礼

回答ありがとうございます!なんだか回答を頂いて”目からウロコ”状態でした。とても簡単で的確な回答ですぐ解決いたしました!本当にありがとうございます!最初エラーメッセージを読んだときはどうなることかと思いましたが、回答を見てすぐわかりました!なるほど・・・でした!本当に感謝です!

その他の回答 (1)

noname#140971
noname#140971
回答No.1

<社員マスター> 社員CD__名前 101_____鈴木 一郎 102_____中村 主水 <売上明細> ID___伝票番号___担当者CD___加工者CD 1____1001_______101________101 2____1002_______102________102 <売上明細_クエリ> ID___伝票番号___社員マスター_担当者.名前___社員マスター_加工者.名前 1____1001_______鈴木 一郎_________________鈴木 一郎 2____1002_______中村 主水__________________中村 主水 SELECT 売上明細.ID, 売上明細.伝票番号, 社員マスター_担当者.名前, 社員マスター_加工者.名前 FROM (社員マスター AS 社員マスター_担当者 RIGHT JOIN 売上明細 ON 社員マスター_担当者.社員CD=売上明細.担当者CD) LEFT JOIN 社員マスター AS 社員マスター_加工者 ON 売上明細.加工者CD=社員マスター_加工者.社員CD; このような<売上明細_クエリ>を作成しようとされているのだと推察します。 <SQL ビュー>を見れば判りますが、例では社員マスターを[担当者.名前参照用]と[加工者.名前参照用]の2つ用意しています。 質問者は、1つのの社員マスターから[担当者.名前]と[加工者.名前]を参照しようとしているのでしょう。 その場合、次のような場合は101と102とに結び付くという曖昧さを生じます。 これを避けるには社員マスターを一つだけではなく二つ配置して別個に結合させます。 <売上明細> ID___伝票番号___担当者CD___加工者CD 1____1001_______101________102 多分、こういうことだと・・・。

viva123
質問者

お礼

とても詳細に説明いただいてありがとうございます!マスタをそれぞれに配置して解決しました。しかし最初私は社員マスターのテーブル自身を2つ作成するのかと勘違いしてしまいました・・・同じ内容のテーブルを作成するのはちょっと・・・と思ってしまいました。私の早とちりでした。丁寧に記載していただいているのに・・・出来の悪い質問者ですみません!これに懲りず、またよろしくお願いいたします!

関連するQ&A

  • ACCESSでデーフル作成入力フォームで入力しながら、クエリのデータを参照したい

    ACCESSで売上明細テーブルを作成し、入力用のフォームを作成しました。他に顧客マスタテーブルがあります。売上明細には顧客CDフィールドがありますが、顧客名等はマスターに存在するため設けてません。しかし売上明細入力時に顧客CDを入力した時点で顧客名の確認がしたいのです。そこで入力フォームの顧客CDの隣に非連結でテキストボックスを作り、そこに顧客名を表示したいのです。売上明細には顧客名のフィールドは追加したくありません。ただ参照したいだけです。顧客マスタと売上明細で顧客CDをキーにクエリを作成し、明細に対応する顧客情報は顧客情報検索というクエリで作成済みです。入力フォーム画面の非連結のフィールドのプロパティのコントロールソースに =DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD]) と表記しましたがエラーになります。 最初はコントロールソースに直接顧客情報検索クエリの顧客名フィールドを表記し、フォーカス取得時にクエリを開くマクロを実行していました。でもやはり表示されませんでした。 顧客名の設定をどのように設定すればいいのですか? コントロールソースでの設定だけでは無理なのでしょうか? よろしくお願いします。

  • ACCESSで複数テーブルのクエリ抽出

    ACCESSで複数テーブルのクエリ抽出 初めて投稿させてもらいます。 テーブル1・・・社員ID(主キー)、氏名 テーブル2・・・社員ID(重複キー有)、顧客ID テーブル3・・・社員ID(重複キー有)、得意先ID テーブル4・・・顧客ID、顧客氏名 テーブル5・・・得意先ID、得意先 上記のテーブル内容を1つのクエリで全部抽出するとき、 テーブル1の社員ID[a]とテーブル2の社員ID[a] と テーブル1の社員ID[a]とテーブル3の社員ID[a] を分けて抽出する方法ってありますか? クエリの結合プロパティで テーブル2の全レコードとテーブル1の同じ結合フィールドと テーブル3の全レコードとテーブル1の同じ結合フィールドにすると 「あいまいな外部接続が含まれているのでSQLを実行出来ません」とエラーになり、 テーブル1の全レコードとテーブル2の同じ結合フィールドと テーブル1の全レコードとテーブル3の同じ結合フィールドにすると 社員ID[a]、顧客ID[1]、得意先ID[α]、顧客氏名[吉田]、得意先[○○商事] 社員ID[a]、顧客ID[1]、得意先ID[β]、顧客氏名[吉田]、得意先[△△金融] みたいになってしまうのです。 やりたい結果は 社員ID[a]、顧客ID[1]、得意先ID["空欄"]、顧客氏名[吉田]、得意先["空欄"] 社員ID[a]、顧客ID["空欄"]、得意先ID[β]、顧客氏名["空欄"]、得意先[△△金融] 説明下手ですいませんが、ご教授の程よろしくお願いします。

  • Access2007 クエリの作成 フィールド選択

    Access2007を独学で勉強中です。とっても基本的なことだと思いますが教えてください。 テーブル「売上台帳」には「売上No.」「売上日」「商品CD」「数量」があります。 テーブル「商品台帳」には「商品CD」「商品名」「単価」があります。 この二つをクエリを使って1つの表として扱えるようにしたいのですが、テキストをみると「商品CD」はテーブル「売上台帳」から取るようになっています。なぜテーブル「商品台帳」の「商品CD」を使わないのでしょうか??? 因みに、どちらから「商品CD」をとっても、クエリのデータシートビューで確認すると同じ結果になりました。 なお、リレーションシップと参照整合性の設定は行っています。 クエリを作成する上で重要なことのように思えましたので、質問させていただきました。 よろしくお願いいたします。

  • クエリ作成でどちらのフィールドが正解ですか

    Access初心者です。 Access2010の学習をしています。 主キーと外部キーで関連付けられた フィールドをクエリで抽出する場合、 デザイングリッドにドラッグするフィールドは、 どちらのフィールドを選べばよいのでしょうか? ---- 「T担当者マスタ」と「T得意先マスタ」をもとに 「Q得意先マスタ」を作成したい場合です・・・ 「T担当者マスタ」のフィールド 担当者コード(主キー) 担当者名 「T得意先マスタ」のフィールド 得意先コード(主キー) 得意先名 フリガナ 〒 住所 TEL 担当者コード(外部キー) 担当者名 デザイングリッドにドラッグするフィールド 得意先コード 得意先名 フリガナ 〒 住所 TEL 担当者コード(※主キーのフィールドを選ぶのは不正解ですか?) 担当者名 ----- 担当者コードは元となるテーブルの両方に存在する わけですが、どんな理由でどちらを選ぶのか 理解できません。 テキストの問題なのに情けないです・・ ご教授ください。

  • ACCESSで複数条件でデータ抽出するフォームの作成

    ACCESS2000で複数の条件を入力し、該当するデータを抽出するフォームを作成しています。どんな方法がありますか?簡単に出来る方法をお教えください。 具体的には、売上明細データを検索します。あらかじめ テーブル:売上明細データ をいろいろなマスタを参照している クエリ:売上明細クエリ を元に抽出します 条件は売上日付の日付1と日付2の項目と、伝票区分の項目です。 フォームの頭にテキストボックスを3つ作成し、日付1~日付2までの売上日付で 入力された伝票区分のもののみを表示させたいのです。 検索というコンボボタンを配置し、クリック時にその下にクエリからの必要な表示項目を売上明細クエリから配置しています。 抽出する方法(条件の与え方)を教えてください。よろしくお願いいたします。

  • アクセス・クエリ内のフィールド上での計算式について

    アクセス上には、顧客IDテーブル、売上テーブルと入金テーブルがあります。 (1) 売上テーブル及び入金テーブル上でのIDは、顧客IDテーブルと紐付くようにしています。 (結合プロパティは、顧客IDテーブルの全レコードと売上(入金)テーブルの同じ結合フィールドのレコードだけを含める設定にしています。) (2) 売上(入金)テーブルからクエリでID毎の合計売上額と合計入金額を算出しました。 (3) (2)を基にフィールドに"ビルダー"にて合計売上額-合計入金額として、ID毎の残高を算出しました。 (4) 問題は、(2)のID毎に合計売上額があっても、IDによっては未入金の場合もあり、 その場合、合計入金額を算出するクエリ上ではそのIDは空の状態で"0"表記もされないために、 (3)は、何も表示されません。(即ち、合計売上額100 - 空 = 空)。空ではなくて、ちゃんと空の場合は、0認識出来る方法ってありますでしょうか?

  • accessテーブル作成クエリを実行したときにオートNo(のような)振る方法

    お知恵をかしてください。 access2000でテーブル作成クエリを実行した時、作成したテーブルのデーターにIDを1番から振りたいのですが(オートNoのような感じで)、方法がわかりません。 計算式・SQLステートメントでの記述でも、どちらでも良いので、お分かりになる方教えてください★

  • Accessでクエリを作成したら・・・

    Accessでクエリを作成したら「式で型が一致しません」のエラーが出て、ヘルプには「JOIN式でデータ型の異なるフィールドを使用して2つのテーブルを結合しようとしています。」とありますが、意味がわかりません。自分ではどちらも同じ数字(コード)で結合しているつもりです。宜しくお願いします。

  • Accessのクエリ作成について

    クエリを作成する際の、テーブルの設定の仕方がよくわかりません。 たとえば、「顧客リスト」テーブルと「販売履歴」テーブルに、それぞれ「顧客ID」フィールドがあり、「顧客ID」フィールドがリレーションシップで設定されているとします。 新たに、選択クエリを作成し、そのクエリに、「顧客ID」フィールドを設定するときに、どちらのテーブルの「顧客ID」フィールドを設定するかがわかりません。 ちなみに顧客IDフィールドには、リレーションシップを設定していて、1対多の設定をしています。 「顧客リスト」テーブルの「顧客ID」フィールドが、「1」の側で、 「販売履歴」テーブルの「顧客ID」フィールドが「多」の側です。 どちらのテーブルを使用しても結果は同じなのですが、 選択クエリを作成するときに、上記のように、同じフィールドを持テーブルが2つありリレーションシップを 設定している場合は、どちらのテーブルを使わないといけないというような決まりはあるのでしょうか? どちらを使用しても構わないのでしょうか。 特に、決まりがない場合は、一般的には、どのように設定されているのでしょうか?

  • Accessのクエリ作成について

    クエリを作成する際の、テーブルの設定の仕方がよくわかりません。 たとえば、「顧客リスト」テーブルと「販売履歴」テーブルに、それぞれ「顧客ID」フィールドがあり、「顧客ID」フィールドがリレーションシップで設定されているとします。 新たに、選択クエリを作成し、そのクエリに、「顧客ID」フィールドを設定するときに、どちらのテーブルの「顧客ID」フィールドを設定するかがわかりません。 ちなみに顧客IDフィールドには、リレーションシップを設定していて、1対多の設定をしています。 「顧客リスト」テーブルの「顧客ID」フィールドが、「1」の側で、 「販売履歴」テーブルの「顧客ID」フィールドが「多」の側です。 どちらのテーブルを使用しても結果は同じなのですが、 選択クエリを作成するときに、上記のように、同じフィールドを持テーブルが2つありリレーションシップを 設定している場合は、どちらのテーブルを使わないといけないというような決まりはあるのでしょうか? どちらを使用しても構わないのでしょうか。 特に、決まりがない場合は、一般的には、どのように設定されているのでしょうか?