アクセスのリレーションシップと等結合について
- アクセス2007を使用して、顧客表と注文表の結合を行い、売上表を作成したいと考えています。しかし、リレーションシップを作成せずに結合を試みたところ、直積結果しか得られませんでした。
- リレーションシップを作成しないと等結合が行われないため、リレーションシップの設定が必要です。
- リレーションシップを作成することで、顧客表と注文表の顧客コードが一致する行のみを取得し、売上表を作成することができます。
- ベストアンサー
アクセスのリレーションシップ
アクセス2007を使用しています。 顧客表 (顧客コード 顧客名) 注文表 (顧客コード 商品名 数) と言う表があります。 二つの表を 1.リレーションシップをはる 2.結合する(クエリ:売上表) 上記作業を行い売上表を作成しました。 売上表作成の流れは、 「当然顧客コードで2つの表が結合され、両方の表に存在する値の行が表示される」 と思っております。 今回の結合(等結合)表の作り方は以下の流れだと思っております。 1. 顧客表、注文表の直積を出す。 2. 顧客表・注文表の顧客コードで一致する行を抽出する。 ここで質問なのですが、 一度、リレーションシップを作成しないで、 顧客表と、注文表を結合しようとし、クエリの売上表を作成しようとしました。 すると、直積結果までしか出ませんでした。 (SQLウィザードを確認しましたが、FROM句までのSQLしかありませんでした。Where,Innnerなし) これはつまり、リレーションシップを張らなければ、等結合が行われないということで 間違いないでしょうか?(Where、Inner JOINでの条件が入らない)
- ShiftTail
- お礼率80% (423/528)
- その他MS Office製品
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> リレーションシップを張らなければ、等結合が行われないということで > 間違いないでしょうか? 「『自動で』等結合が行われない」という意味でしたら、間違いありません。 なお、既にご存知かもしれませんが、この場合も、デザインビュー上で手動で 結合させることは可能です。 (クエリのデザインビューで、顧客表の『顧客コード』フィールドを、注文表の 『顧客コード』フィールドにドラッグ&ドロップすればOK) 因みに、リレーションシップが未設定だった場合にクエリで結合線が自動で 追加されないのは、「Accessのプログラムが、自動で追加していいと判断 する根拠がないため」と考えられます。 ただ、余談になりますが、ひとつ前のバージョンであるAccess2003では、 リレーションシップが設定されていない場合でも、 a)2つのテーブル間に、名前とデータ型が同じフィールドがあり、 b)少なくともその一方に主キーが設定されている の2つの条件が満たされていれば、自動で結合線が追加されました。 (Access2007で「結合線の自動追加の判断基準」が変更されたようです)
関連するQ&A
- リレーションシップの設定について
リレーションシップの設定について Access2002にて受注管理を行っており テーブル、フィールドが次のように存在しています。 <T_納入先> 顧客ID 納入先コード 住所等情報... <T_顧客> 顧客ID 住所等情報... <T_売上情報> 受注ID 顧客ID 売上日やその他情報... <T_売上明細> 受注ID 明細や金額等... ---------- <T_顧客>に登録した顧客は複数の納入先を持つため [<T_顧客>の顧客ID 対 <T_納入先>の顧客ID]を[1 対 多]にてリレーションシップを作成しています。 <T_売上情報>の顧客IDと、<T_顧客>の顧客IDを[1 対 1]にて リレーションシップを作成しています。 ---------- ここで売上情報を登録するために「売上入力フォーム」なるものを作成し、 顧客IDや納入先の指定、売上日の記録や売り上げた明細を登録したいのですが 明細の入力部分は、サブフォームを作成し、<T_売上情報>と<T_売上明細>のクエリで問題ないのですが このフォーム自体のレコードソースとして使用するために <T_納入先><T_顧客><T_売上情報>の3つのテーブルの情報を含んだクエリを 作成したのですが、クエリ作成後、実行してもレコードが一切表示されません。 (おそらく<T_顧客>の中にさらに納入先が複数ある部分が うまくリレーションシップできていなくて矛盾を起こしているのでは・・と思ったのですが。) もちろん<T_納入先>と<T_顧客>のみであれば問題なくクエリは実行し、レコードも表示されます。 ある一つの顧客情報内にも複数の情報(=納入先)がある場合、 リレーションシップの設定はどのようにすればよいでしょうか。 長々とありますが、お分かりのかた是非とも教えて下さい。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- クエリー列選択の基準
顧客表 (顧客コード 顧客名) 注文表 (顧客コード 商品名 数) の表から 売り上げクエリー(ビュー)を作成しようと考えています。 (注文表に、ON UPDATE CASCADE設定済み) 1.表示クエリーを作成する場合 {顧客表.顧客コード , 顧客名 , 商品名 , 数} or {注文表.顧客コード , 顧客名 , 商品名 , 数} どちらの列で作成しても問題ないと思います。 2.更新クエリを作成しようとする場合 (1).{顧客表.顧客コード , 顧客名 , 商品名 , 数} or (2).{注文表.顧客コード , 顧客名 , 商品名 , 数} ・表作成後、顧客コードを更新すると考えた場合 (1)の場合は、顧客コードのマスター列を更新するため、子表:注文表の列も更新されるためエラーは起きないと考えています。 (2)の場合は、注文表の顧客コードの更新になるため、更新エラーになると考えています。 質問:検索クエリー(ビュー)を作成する場合は、特に列の選択は気にしなくてもいいと思っているのですが、 更新クエリーを作成する場合は、(1)(2)のようなケースがあると思っています。 更新クエリーの列の選択は、更新エラー等まで考えて列選択をしたほうがいいのでしょうか。 (親表の列を、使用するという考えでは雑でしょうか。)
- ベストアンサー
- その他(データベース)
- Access(リレーションシップについて)
Win XP Office 2003 Accessを勉強中です。 デザインビューでクエリを作成するときに、関連するテーブルを表示させると自動的に「結合プロパティ」の線が表示されますが、 この表示で自動的に「1対多」を表示する時としない時がありますが、これは何故でしょうか。 これはどこかから設定をしてやるのでしょうか。 また、同じような線としてメニュバーから「リレーションシップ」を表示させることが出来ますが、 内容的には「結合プロパティ」と同じものですが、これは「リレーションシップ」とはどのようなに使い分けるものでしょうか。
- ベストアンサー
- オフィス系ソフト
- INNER JOINとwhere句
等結合のSQLを書く必要が出てきた場合、 INNER JOINとwhere句 どちらを使用されてるか教えて頂けないでしょうか? 私は、結合表の数が多くなってくると INNNERのSQLはぱっと見て見にくいと想いWHEREを使っているのですが。 (何より、WHEREのほうが構文が簡単で・・・。) よろしくお願いします。
- ベストアンサー
- その他(データベース)
- アクセス:クエリの結合とリレーションシップの違いについて
アクセス初心者です。 ◆ある請求システムをクエリ上の結合と関数だけでほぼ完成できました。誤作動もなく、正確な結果がでます。いわゆるリレーションシップをしないでの構築です。 ◆構成は、請求対象者の個人IDをキーにして、請求対象日付、基本料、食事料、立替金、その他請求という比較的シンプルななものを結合させて作成しています。クエリ上で関数で日付のところで何月分の請求かを抽出するようなしくみです。 ◆しかるに、完成させてしまってから「リレーションシップ」はしたほうがいいという内容のものをいくつかの資料でたまたま目にするようになりました。 ◆しかるにクエリーでできてしまったシステムで現時点で不具合は全く発生せず、リレーションの必要性が理解できません。 ◆というより、リレーションシップそのものを知らない段階でクエリの結合に取り組んだ者ですから、リレーションシップとは何ぞや?というレベルです。 ◆そこで、今回、クエリの結合とリレーションシップの違いについてアドバイスをいただけないでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Accessリレーションシップ
Accessにて、 テーブルA(個人情報) ●個人コード ●名前 ●住所 ・ ・ テーブルB(個人ごとの数量管理) ●個人コード ●数量 上記のようなテーブルがあるとします。 これは、1:1のリレーションシップにしたいのですが、 クエリAを作成して ●個人コード(テーブルB) ●名前(テーブルA) ●数量(テーブルB) 個人コードを入力すると、名前を参照するというふうに したいのですが、1:1のリレーションシップだと個人コードの入力時に 参照はできないのでしょうか? 一旦閉じて、開くと参照していますが・・・。 良いご意見がありましたら、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- MS ACCESSにおいてのリレーションシップ設定
ACCESSを使用してシステムを構築しているのですが、テーブル間のリレーションシップについて疑問があります。 リレーションシップを設定することにより、データベースの整合性を得ることができますが、その他のメリットはあるのでしょうか? ある文献では検索時間の短縮になるとあったのですが、本当なのでしょうか? 通常の表結合クエリーと参照整合性以外の違いはどのようなものでしょうか? 回答をお願いします。
- ベストアンサー
- その他(データベース)
- リレーションシップが作成できなくなりました
Accessにて、受注管理システムを構築しているのですが 何かの拍子で、リレーションシップが壊れてしまい 再度設定しようとしても 「このリレーションシップを作成して、参照整合性を設定できません」と表示されできません。 テーブルは3つあり、以下の通りになっています。 ・顧客管理テーブル(顧客IDと氏名・住所など) ・売上情報テーブル(受注IDと、顧客IDなどの情報) ・売上明細テーブル(明細IDと、受注IDなどの情報) 問題の箇所は、売上情報テーブルと売上明細テーブルで 売上情報テーブルの「受注ID」と売上明細テーブルの「受注ID」 を結びつけようとすると、上記のメッセージが出てきてしまいます。 一通り、主キーの設定や空白行などはチェックしてみましたが やはり解決しませんでした。 一度壊れてしまったリレーションシップは修復不可能なのでしょうか・・・ どなたか、お知恵を拝借願います。
- ベストアンサー
- オフィス系ソフト
- リレーションシップを含んだクエリについて
環境:WinXP Pro、Access2002 下記のようなテーブル構成で売上管理を作っています。 ----------------------- T_売上情報 ・売上ID ・売上日 ・顧客名 ----------------------- T_売上明細 ・明細ID ・売上ID(T_売上情報の売上IDと1対∞でリレーションシップ) ・商品名 ・単価 ----------------------- (クエリ) T_売上情報.売上ID:T_売上情報.売上日:T_売上情報.顧客名:T_売上明細.明細ID:T_売上明細.商品名:T_売上明細.単価 ※各フィールドの集計を「グループ」にし、一売上毎の合計金額を求めています。 上記のように選択クエリを設計し実行すると、「T_売上情報」と「T_売上明細」の情報がひも付けされた 結果が出てくると思いますが、例えばある売上IDに1件も売上明細のレコードが無い場合は このクエリでは表示されませんが、これを表示するようにすることは可能でしょうか?
- ベストアンサー
- オフィス系ソフト
- Accessの結合線をクエリのデザインビューで削除した場合、リレーションシップにも影響がありますか?
Accessでクエリを作成時にデザインビューでテーブル間の結合線を削除しました。 リレーションシップで定義した結合線も自動的に削除されてしまうのでしょうか? リレーションシップも自動的に削除されると他のクエリにも影響がでるので大変な事になると思い、危惧しています。 どなたか教えてください。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 やはり、同じでしたか。 すっきりしました。