Accessクエリ作成のフィールド選択について

このQ&Aのポイント
  • Access初心者のためのクエリ作成で、主キーと外部キーで関連付けられたフィールドを選ぶ際の正しい方法を教えてください。
  • 「T担当者マスタ」と「T得意先マスタ」を基に「Q得意先マスタ」を作成する場合、デザイングリッドにドラッグするフィールドの選び方が分からないです。
  • 担当者コードが両方のテーブルに存在するため、どちらを選ぶべきか理解できません。具体的な選択方法を教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
回答No.4

> 言葉足らずですみません。 > 「T担当者マスタ」の「担当者名」と > 「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。 それは間違いですね。 それでは、参照整合性に「チェック」を入れることができないはずです。 主キーと外部キーをリンクさせる必要がありますので、 担当者コード 同士でリンクさせないとだめです。

eeeeeiiiii
質問者

お礼

間違えていました! 「担当者コード」と「担当者名」を 整理できていませんでした。 ご回答いただいて、間違えていることを理解できました! ・主キーと外部キーをリンク ・担当者名を複数個所に設けない リンクされていない重複するフィールドだから まともな質問になっていなかったのに 親切に教えていただき、本当にありがとうございます!!

その他の回答 (4)

回答No.5

> >通常は得意先ごとの担当=期間×担当者で組みます。 > > 設定としては、「T得意先マスタ」に、期間フィールドを設ければ > 良いのでしょうか? 担当の履歴を残したいとなると、 担当者 と 得意先 の関係は、多対多の関係になりますので、中間テーブルが必要になります。 T得意先マスタとT担当者マスタとは別に下記のテーブルを作成してください。 T担当履歴 --------- 得意先コード (外部キー) 担当者コード (外部キー) 開始日 終了日 これとは別に、 No.3の回答者さんも言われてますが、現行担当者 のフィールドを、T得意先マスタ に置いておくのは有効な方法だと思います。

eeeeeiiiii
質問者

お礼

なるほど。 テーブルを増やせばいいのですね! ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

蛇足ですが、 得意先に対する担当者は永続的に同じというわけではないので 通常は得意先ごとの担当=期間×担当者で組みます。 そうでないと来月から担当が変わる・・・などのデータが設定できず 担当が変わる瞬間にメンテをしないというあわただしい仕組みになります。 (また過去の担当の履歴もあればあったで便利でしょう) もちろん得意先テーブルの各データに現行担当の担当者コードを埋め込んでおくと 検索性が向上するので有効です。 その場合は、期間×担当→現行担当を更新する処理がデイリーのバッチで行うことになります

eeeeeiiiii
質問者

補足

ご回答ありがとうございます! >通常は得意先ごとの担当=期間×担当者で組みます。 設定としては、「T得意先マスタ」に、期間フィールドを設ければ 良いのでしょうか?

回答No.2

まずは、テーブル設計が少し間違っいます(正規化されていない)。 「T担当者マスタ」に「担当者名」があり、「T得意先マスタ」にも「担当者名」がありますが、 「T得意先マスタ」の「担当者名」は不要ですので削除してください。 データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。 さて、本題ですが、 どちら表示させていいいといえばいいのですが、 通常は、T得意先マスタ を表示させます。 理由としては、両方表示させて、それぞれのフィールドを更新してみれば分かりますが、 T担当者マスタ の 担当者コード を更新しようとしても更新できません。 (整合性矛盾を防止のためにロックがかかる) T得意先マスタ の 担当者コード の方は更新できる。コードを更新するとそれにともなって担当者名も自動で変わります。 通常はこの方が好ましいと思います。 このように外部キーを表示させて、それに対応するマスターのデータを表示させるものをオートルックアップクエリと言って、よく使われるものです。 オート ルックアップ クエリを作成するには http://support.microsoft.com/kb/879978/ja

eeeeeiiiii
質問者

お礼

ご回答ありがとうございます。 >データベースではリンクするフィールド以外は重複する値が複数箇所に存在してはいけません。 言葉足らずですみません。 「T担当者マスタ」の「担当者名」と 「T得意先マスタ」の「担当者名」をリレーションシップでリンクしています。 >(整合性矛盾を防止のためにロックがかかる) 実際にフィールドの更新をして、確認しました。 なるほどです。納得のできる理解です。 学習をすすめてみます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

「得意先には一人の担当者がいる」なんですね? どちらでも良さそうだが、私なら 「担当者マスタ」のほうを使う。 「そのクエリ」を作る目的は「担当者が担当している得意先のリストを作るため」だから。 OUTER JOINの場合等、参照整合性に不都合があって結合できない事態があっても 表示されるのは「担当者マスタ」の値だから。

eeeeeiiiii
質問者

お礼

なるほど、そう考えるとしっくりきます。 目的を考えると理解できました。 ありがとうございます!! 運用面での考慮がポイントなんですね。

関連するQ&A

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

    【Tジャンル】【T商品】【T仕入先】 ↑これらの3つのテーブルを使ってクエリを作成すると仮定します。 それぞれのテーブルにあるフィールドの内容は以下の通りです。 【Tジャンル】 [ジャンルコード(主キー)][ジャンル名] 【T商品】 [商品コード(主キー)][商品名][ジャンルコード] [仕入先コード][仕入原価][標準価格][終息][備考] 【T仕入先】 [仕入先コード(主キー)][仕入先名][フリガナ][郵便番号] [住所][建物名][電話番号][FAX番号][担当者名][メールアドレス] ここで質問があります。 クエリ作成のデザイングリッドのフィールドに [仕入先コード]を追加するとします。 [仕入先コード]は【T商品】と【T仕入先】両方にあるのですが、 フィールド名が同じならば、どちらから追加しても構わないものなのでしょうか? それとも、何か決まり事のようなものがあるのでしょうか? 基礎的な部分の質問ですが、ご存知の方がおられましたら、 どうか宜しくお願いします。

  • Access2000のテーブルのフィールドについて

    Accessのテーブル設計で困っています。 担当者マスターテーブルに担当者CD(主キー)と担当者名のフィールドが入っています。取引先マスターテーブルには取引先CD、取引先名、担当者を2名いれたいのですが、どのようにしたらいいかわかりません。ひとつの取引先に2名の担当者がいる場合どのように管理をしたらいいでしょうか。1つの取引先に対し、1名の担当者だったら、担当者CDをいれクエリで出すことが出来るのですが、2名となるとどうなのでしょう? どなたかご教示ください!よろしくお願いいたします。

  • 参照整合性の規則に違反しています。

     http://okwave.jp/qa/q8426435.htmlの質問に続きですが  恥ずかしながら、まだ解決に至っていません。問題が発生して年を越してしまいました。  サンプル問題Accessファイルは以上のURLからとれますので、興味の有られる方は  どうぞ、参考にされてください。  それで、  以下を追加しました。    T得意先マスター:テーブルのフィールド名は 得意先CD  得意先名 フリガナ  〒  住所1  住所2 TEL  担当者CD  DM  の9フィールドです。   T売上げデータ:テーブルのフィールド名は   NO  売上日  得意先CD  数量  の4フィールドです。    以上宜しくお願いいたします。

  • ACCESS,パラメータクエリをフォーム上のボタンで起動する

    下記のようなパラメータクエリがあるとします。 SELECT T_得意先.フリガナ, T_得意先.得意先名, T_得意先.得意先名 FROM T_得意先 WHERE (((T_得意先.得意先名)=[????])); (内容は、何でも構いません。気にしないでください) これを、フォームに設定したボタンで起動したいのです。 どのようにすれば良いですか? ボタンに on clickで、下記のようにやってみましたが、案の上だめでした。 Private Sub Command0_Click() SELECT T_得意先.フリガナ, T_得意先.得意先名, T_得意先.得意先名 FROM T_得意先 WHERE (((T_得意先.得意先名)=[????])); End Sub よろしくお願い致します。

  • Accessで3つのテーブルの結合とフィールドについて教えてください。

    Access2003を使用しています。 「取引先マスタ」テーブルに契約の情報ものせることにしました。 契約は今のところ2種類ありますが、3種類になる可能性もありそうなので、応用が利くようにサブフォームにしました。http://questionbox.msn.co.jp/qa3473958.html 契約内容では弊社の誰が担当したのかわかるようにしたいです。 けれど担当者は新たにフィールドを設けずに、担当者マスタのテーブルから引っ張ってきたほうが良いのかなと思いました。 とすると、契約のテーブルには担当者IDだけでも加えないと結合できないなと思いました。 質問1.この考え方であっているでしょうか? 各テーブルは下記のようになっています。 質問2.T取引先マスタとT担当者マスタに「担当者」という同名のフィールドがありますが、意味合いは違います。これは「取引先担当者」と「弊社担当者」と名前を分けたほうがよいのでしょうか? 一緒でもなんとかいけるものでしょうか? テーブルの正規化いうものがしっかりと理解できていないので正しいのかどうがわかりかねています。 この3つのテーブルを結合させて、フォームとレポートを作りたいのです。 そして、契約締結済みと未締結との取引先に抽出わけをしたいのです・・・が、ここでつまずいてしまって困っております。 お手数をおかけして申し訳ないのですが、どなたかご教示ください。 よろしくお願いいたします。 T取引先マスタ  ID  取引先ID  取引先名  フリガナ   部署名   担当者名・・・・・・取引先の担当者名  郵便番号  都道府県  住所1  住所2  電話番号  FAX番号  URL  電子メール  備考   T取引先_契約内容  ID  取引先ID  契約種別・・・・・・基本と業務委託がある  契約締結日  契約終了日  契約者役職  取引先契約者名  担当者ID・・・・・・弊社の担当者を判別するもの。T担当者ますたと結合する。 T担当者  担当者ID  並べ替え  担当者名  フリガナ  備考  

  • ACCESSでの得意先情報・納品書の作成

    教えて下さい ACCESSで得意先情報と納品書を作成しています 得意先情報は 得意先コード 得意先名 郵便番号 住所 TEL FAX 担当者 の7項目です ただ、担当者は1つの会社に7人程います 得意先は80社ぐらいです このデータを元に納品書を作成します この時に得意先コードを選ぶもしくは入力すると 得意先名が自動で入り、尚且つその会社の担当者の7人を コンボで選べるようにするにはどうしたらいいですか? 超初心者です よろしくお願いします

  • Accessでクエリを作った際の順番

    Access2003の質問です。 以下のテーブルがあってそれらの項目を抜き出してクエリを作っています。 テーブル1 ・商品CD ・商品名 ・単価 テーブル2 ・No ・売上日 ・得意先CD ・商品CD ・数量 テーブル3 ・得意先CD ・得意先名 ・フリガナ ・郵便番号 ・住所 ・TEL ・担当者CD ・DM テーブル4 ・担当者CD ・担当者名 クエリ ・No(テーブル2) ・売上日(テーブル2) ・得意先CD(テーブル2) ・得意先名(テーブル3) ・担当者CD(テーブル3) ・担当者名(テーブル4) ・商品CD(テーブル2) ・商品名(テーブル1) ・単価(テーブル1) ・数量(テーブル2) クエリを作って、データシートビューに切り替えるとなぜか得意先CDで昇順に並んでいます。 もちろんNoで並べ替えを設定すれば、Noで並べ替わるのですが、なぜ得意先CDで昇順に並ぶのでしょうか? Noが一番左にあるので、Noで並べ替わりそうなものですが・・ 何も並べ替えを設定しないとどのような基準で並ぶのでしょうか? わかる方がいれば教えてください。

  • access2000のクエリについて

    現象:クエリの新規入力フィールド(*印の行)が表示されません!!目的:得意先別の商品単価を持ちたい。現状:テーブルは3つの選択クエリなのですが、T受注明細に商品コード、T受注に得意先コードを持ってます。T得意先別商品価格に得意先コード&商品コードを主キーとした単価を持たしています。こうすると、既存のデータには 単価が反映されるのですが、データを新規入力することが 出来ないのです。T得意先別商品価格をなくせば、*印の行が表示されるので、これが原因だと思うのですが、テーブル定義に問題があるのでしょうか?お手数ですがご回答をお願いします。。。

  • Access Dlookup関数について

    Dlookupで悩んでいます。 ExcelのVlookと違い、“数字”のコードでなければ引っ張ってこれないのでしょうか? 以下、がその内容です。 「T_得意先マスタ」の得意先コードフィールドに aaa というコードがあり、得意先名フィールドに ○○商事 とあります。 どうやってもできないのです。 なぜか、aaa ではなく、数字(例. 123)にすると出ます。 教えてください。 Private Sub 得意先コード_AfterUpdate() Dim a As Variant, b As String b = "得意先コード = " & Me![得意先コード] a = DLookup("得意先名", "T_得意先マスタ", b) If IsNull(a) = True Then Me.テキスト1.Value = "該当がありません。": Me![得意先コード] = Null Else Me.テキスト1.Value = a End If End Sub

  • Accessでのクエリー作成

     テーブル 納品先コード・納品先名・商品名・数量・仕入れ先コード・仕入れ先名  となっているのを、 クエリー上で 納品先コード・納品先名・(仕入れ先別納品)数量合計・仕入れ先コード・仕入れ先名  としたいのですが、どうしたらいいでしょうか?