- ベストアンサー
アクセスのクエリ作成について
下記のようなテーブルとフィールドがあるとします。 Aテーブル 会社名 分類 都道府県 住所 HPアドレス Bテーブル 担当者 部署 電話 メールアドレス Cテーブル 受付番号 分類 Dテーブル 受付番号 分類 ここでAテーブルの都道府県で一致するデータを抽出し、 下記のフィールドを表示するクエリを作成したいと思っています。 A 会社名 分類 都道府県 住所 HPアドレス B 担当者 部署 メールアドレス 電話 C 受付番号 D 受付番号 クエリを作成し実行しましたが、何もデータが出てきません。 全フィールド入力していないと抽出できないのでしょうか。 中にはHPアドレス等がない場合もあるのです。 すみませんが、どなたか教えて下さい。 よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
No.7に漏れがありました。再提示しますのでNo.7は無視してください。 >全フィールド入力していないと抽出できないのでしょうか。 キー項目でなければ問題ありません >会社コードという形で4つとも関連づけされています。。。 ひとつの項目が全てのテーブルのリレーション項目になっているのはどうかと思います。 >学科にも学校にも同じ企業から送ってくる場合があります。 以上の情報からでは次の体系が考えられます。 Aテーブル:会社名ID 分類ID 都道府県 住所 HPアドレス Bテーブル:担当者ID 担当者名 会社名ID 部署 メールアドレス 電話 学科テーブル:学科名ID(学校宛に来たときのために学校という科目を追加) 分類テーブル:分類ID 求人票テーブル:求人票ID 担当者ID 学科名ID 受付年度 受付日 受付窓口 各テーブル左端がキー項目でデータ形式は (分類ID、会社名ID、学科名ID :テキスト型)( 担当者ID、求人票ID:オートナンバー) これで次のリレーションが組めます [分類]→[A]→(会社ID)[B] →(担当者ID)[求人票] [学科]→(学科名ID)[求人票] リレーションシップは全て1対多の参照性合成です…→の左側のテーブルが1、右側のテーブルが多 次に右側のテーブルの項目にルックアップの設定をします 例として[A]から[分類]へのルックアップの作成です。 1.オブジェクトをテーブルにして、テーブル一覧表の中から[A]をアクティブにして、デザインアイコンをクリック 2.項目一覧内の分類をクリック 3.左下枠のルックアップタグをクリック 4.表示コントロール、値集合タイプ、値集合ソースの3項目を設定(いずれも入力枠の右端をクリックし、リストから選択) ※ 表示コントロール:コンポボックス 値集合タイプ:テーブル/クエリー 値集合ソース:[分類]
その他の回答 (7)
- shinkami
- ベストアンサー率43% (179/411)
>全フィールド入力していないと抽出できないのでしょうか。 キー項目でなければ問題ありません >会社コードという形で4つとも関連づけされています。。。 ひとつの項目が全てのテーブルのリレーション項目になっているのはどうかと思います。 >学科にも学校にも同じ企業から送ってくる場合があります。 以上の情報からでは次の体系が考えられます。 Aテーブル:会社名ID 分類 都道府県 住所 HPアドレス Bテーブル:担当者ID 担当者名 会社名ID 部署 メールアドレス 電話 学科テーブル:学科名ID(学校宛に来たときのために学校という科目を追加) 求人票テーブル:求人票ID 担当者ID 学科名ID 受付年度 受付日 受付窓口 各テーブル左端がキー項目でデータ形式は (会社名ID、学科名ID :テキスト型)( 担当者ID、求人票ID:オートナンバー) これで次のリレーションが組めます [A]→(会社ID)[B] →(担当者ID)[求人票] [学科]→(学科名ID)[求人票]
- shinkami
- ベストアンサー率43% (179/411)
No.5のshinkamiです。 他の方にご異論があるかと思いますが キー項目はAccess任せに出来ますが、Aテーブルは会社名,Bテーブルは担当者名をキー項目に設定されることをお勧めします。 この方法については新しい質問を立ち上げてください、色々答えが得られると思います。
- shinkami
- ベストアンサー率43% (179/411)
エクセルデータが有るのならこのデータをアクセスにインポートしてはどうですか、手順を次に記します。 1.アクセスでインポートし易い様にエクセルデータを加工します。 1-1、ひとつのシートにはひとつの表であること ※複数のときは、同じブック内にシートを追加してここにカット&ペーストで データを移動します 1-2、ワークシート名を設定します。これがテーブル名になります。 1-3、項目名を1列にまとめます。これがフィールド名になります。 ※このとき1シート内に同じ項目名があってはなりません。 1-4、これでインポート準備完了です。名前をつけて保存します。 2.アクセスでのインポートです。 2-1、空のデータベースでアクセスを立ち上げます。 2-2、アクセス画面の左のオブジェクト枠がテーブルになっていることを確認して新規作成→テーブルのインポート→ファイルの種類をエクセルにして、インポート画面指示に従って行くが、主キーを自動的に設定するで完了です 3、テーブルの正規化。正規化されたテーブルがアクセスの強みです 3-1、ツールメニューから解析→テーブルの正規化から途中まではウィザード任せですが、テーブルが分けられた段階で各項目がいい加減なテーブルにきています、多分あなたのExcelファイルなら会社、担当者、分類…多くのテーブルが新規作成されますが、都道府県、住所は会社テーブルにドラッグ移動したり、データファイルに戻したり等々の作業になります 追伸、Aテーブルに分類項目がありますがCまたはDテーブルの項目では?、Aテーブルとしたら業種?
- CHRONOS_0
- ベストアンサー率54% (457/838)
>関連づけ(リレーションシップ)はしています。 してるだけではだめです 全体として事象をきちんと表現できるような構造になっていないとね >テーブル名もあります。 >例としてあげたフィールド名は一部で、実際はもっとありますが・・・ いい答えを得ようと思ったら分かり安く説明しなきゃ そのためには下手な省力や隠し事はしないほうがいいですよ (的確な代替モデルを作成できるだけのスキルがあればここで質問したりしないですもんね) >アクセスならそれが解消できると聞き、 Accessでは矛盾したものを扱えるという意味ではなく 逆にいい加減なやり方は許容されないので やり方のほうを変えることになるという意味も含んでのことだろうと思いますよ >それは指示されていることなのです。 要求におかしいところがあれば、きちんと説明して変更を納得してもらうことも システム設計の仕事のうちです 学科と学校で別々に受け付けるとしても 後で重複をはずして合体させないと使い物にならないでしょうから そういうことが出来る構造にしておかないとだめでしょうね
お礼
>(的確な代替モデルを作成できるだけのスキルがあればここで質問したりしないですもんね) はい、おっしゃる通りです。。。 >やり方のほうを変えることになる そのようですね。私の今の頭では、なかなかアクセスのやり方にスイッチが切り替わっていないですね。 >要求におかしいところがあれば、きちんと説明して変更を納得してもらうこともシステム設計の仕事のうちです その通りですね。 アクセスをもっときちんと勉強しないといけないですね。 どうもありがとうございます。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>AとBをなぜ分けたかと言われたら自分でもよくわかっていないのですが そんなことより、このデータベースで何を管理したいのかということが見えてこないのですよ 受付情報を管理したいのなら、それがメインになります (受付がA、Bを参照しているという形かな?) まずAやBなんて意味のない名前じゃなく 何のテーブルかが分かるような名前をつけてみてください そうすれば頭の中も整理されると思いますよ >CとDは受付窓口が違うため、受付番号が違ってくるのです。 こんなことをしてはいけません 受付窓口情報が必要ならテーブルを分けずにフィールドを増やしましょう [受付T](受付番号、受付日、受付窓口、会社ID、担当者ID) >会社コードという形で4つとも関連づけされています。。。 同じフィールドがあるから関連付けられているということにはなりません
補足
関連づけ(リレーションシップ)はしています。 テーブル名もあります。 例としてあげたフィールド名は一部で、実際はもっとありますが・・・ 作成段階に戻ってしまいましたね。 やはり、わからないまま作成してはだめですね。 求人データを入力しています。 今まではエクセルを使って入力していました。 1.学科に来た求人票を年度ごとに到着順に番号をふる 2.学校に来た求人票を年度ごとに到着順に番号をふる 窓口が違うというのはこういうことです。 ところが、学科にも学校にも同じ企業から送ってくる場合があります。 また、毎年毎年ほぼ同じ企業情報を入力することになります。 そこでアクセスならそれが解消できると聞き、作成することになりました。 学科と学校と別にする必要はないかもしれませんが、それは指示されていることなのです。 (別に質問を設けるべきなのでしょうが・・・)
- CHRONOS_0
- ベストアンサー率54% (457/838)
各テーブルをつなぐものがありませんね 都道府県を指定すればAテーブルを絞り込むことはできますが そのとき他のテーブルはどうなって欲しいのでしょう? そもそも4つのテーブルで何をしようとしているのかが見えてこないですよ CとDの違いも分からないし 受付を管理しようというのなら [受付T](受付番号、受付日、会社ID、担当者ID) でA、Bとは会社ID、担当者IDでリレーションさせる というようにしないといけないので社
補足
いつもアドバイスありがとうございます。 関連づけは会社コードでしています。 AとBをなぜ分けたかと言われたら自分でもよくわかっていないのですが(素人ですみません。アドバイス頂いたまま作成したもので・・・) CとDは受付窓口が違うため、受付番号が違ってくるのです。 他にもすっきりした方法があると思います。 試してみたらこの方法で欲しいものが作成できたので、とりあえず現在のところこれでデータ追加中です。 (過去に QNo.2358920 QNo.2476341 QNo.2571411 でお伺いしました) 現在は一つのフォームに収めて入力しています。 フォームで都道府県を絞り込めば、きちんとデータが出てきますが、 それらをリスト形式にエクスポートしたいのです(4つのテーブルデータを全て含んだもの)。 そこで、データを追加しても常にリストが更新されるクエリで抽出できないかなと思ったのですが・・・
- shinkami
- ベストアンサー率43% (179/411)
各テーブル間に関連付け(リレーションシップ)をしましたか? 例えばAテーブルとBテーブルでは会社名と思われます。 Aテーブルで会社名がキー項目ならば、Bテーブルに会社名の項目を追加します。 Aテーブルでキー項目が別に存在するのであれば、それを受ける項目を追加します。 ※テーブル作成のときキー項目を設定しなかったら、ACCESS側でIDという項目を追加されます。 次に、ツールメニューのリレーションシップで関連付けをします。 ※関連付けする項目の一方がキー項目で、他方が通常項目
補足
回答ありがとうございます。 ここに記し忘れていましたが、会社コードという形で4つとも関連づけされています。。。
お礼
詳しく教えて下さりどうもありがとうございます。 最初から作成しなおしという方向に持って行きたいと思います。 最初から作成ということになると現段階では時間が取れそうにないので、 とりあえずこちらは締め切っておきます。 ご丁寧にどうもありがとうございました。