質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

990閲覧

ACCESS フィールドの値の一部を利用してクエリを作成する

mnbwqz

総合スコア74

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2021/10/26 02:25

編集2021/10/30 09:17

二つのテーブルを使いフィールドの値の一部を利用するクエリを作りたいです。
会議室の備品は、A02とA03がA01と同じ内容、B02がB01と同じ内容になります。
(会議室名の最初のアルファベットが同じものが、備品も同じになります)
よろしくお願いします。

会議室 テーブル

会議室名
A01
A02
A03
B01
B02

会議室備品 テーブル

会議室名椅子机ホワイトボード
A01202
B01100

会議室クエリ実行結果

会議室名椅子机ホワイトボード
A01202
A02202
A03202
B01100
B02100

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

2つのテーブルを会議室名でリレーションします。
この際、備品の無い会議室もあるでしょうから、会議室テーブル ➡ 会議室備品テーブル となるようにリレーションします。

会議室の備品は、A02とA03がA01と同じ内容、B02がB01と同じ内容になります。

上記見落としていました。
クエリーをSQLビューで開き、以下のSQLを貼り付け後、デザインビューに切り替えてみて下さい。
※会議室名を、「会議室グループ」と「会議室番号」を分けて定義して、デザインビューでも編集できるようにした方が良いかと思います。
取り敢えず現状では、デザインビューでは編集できず、SQLビューのみので編集になります。

SQL

1select 会議室テーブル.会議室名, 会議室備品テーブル.机椅子, 会議室備品テーブル.ホワイトボード 2from 会議室テーブル 3 left join 会議室備品テーブル 4 on 会議室テーブル.会議室名 like left(会議室備品テーブル.会議室名, 1) & "*"

投稿2021/10/26 02:58

編集2021/10/26 03:07
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnbwqz

2021/10/26 10:04 編集

ありがとうございます。 上記SQLで動作しました。 仰る通り、デザインビューでは編集できない旨メッセージが表示されました。 (*結合で、>や<などのデザインビューではサポートされていない演算子が使われています。)に該当するようですね。 デザインビューで表示できないと、画面を見ながらクエリを作成するというアクセスのメリットが活かせないのが残念ですね。仰る通り、会議室名を、グループ部分と番号部分に分けた方がいいかも知れません。
guest

0

ベストアンサー

下記のようなSQLでどうでしょう。

sql

1SELECT 2 会議室テーブル.会議室名, 会議室備品テーブル.椅子机, 会議室備品テーブル.ホワイトボード 3FROM 4 会議室テーブル INNER JOIN 会議室備品テーブル 5 ON 会議室テーブル.会議室名 Like Left(会議室備品テーブル.会議室名,1) & "*";

補足アドバイス

もし、会議室テーブルに存在して、会議室備品テーブルに存在しない会議室名がありそれも表示したい場合は、
INNER JOINLEFT JOIN に変更てください。

あと、余計なお世話かもしれませんが、
テーブル設計が変更可能なら、下記のような正規化されたものにすることをお勧めします。

会議室テーブル

会議室名1会議室名2
A01
A02
A03
B01
B102

会議室名1 と 会議室名2 で複数フィールド主キー

会議室備品テーブル

会議室名1備品名数量
A椅子机20
Aホワイトボード2
B椅子机10
Bホワイトボード0

会議室名1 と 備品名 で複数フィールド主キー

現状のテーブルだと管理する備品が増えた場合、そのたびにテーブルデザインを変更する必要が出てきます。

ご希望の結果にするには、クエリのデザインビューで 会議室テーブルと会議室備品テーブルを結合して、クロス集計クエリにすれば可能です。

投稿2021/10/26 02:57

編集2021/10/29 06:23
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnbwqz

2021/10/26 10:18

ありがとうございます。 御記載のSQLで動きました。 複合主キー、ACCESSでも利用できるのですね。 勉強になります。 >クエリのデザインビューで 会議室テーブルと会議室備品テーブルを結合して という過程を経てクロス集計クエリ(初めて耳にしました)に至る過程が、どのようなSQLになるか分かりませんでした。 会議室の備品が増えても、テーブルに新たにフィールドを増やすのではなく、備品フィールドに追加していくだけで済むのは、本当に便利ですね。 大変お手数ですがSQL文、もしくは考え方・キーワードを教えていただけないでしょうか。手元のSQLの本も再度確認してみたいと思います。
hatena19

2021/10/26 12:07

まずは「テーブルの正規化」をキーワードにWEB検索してみてください。 リレーショナルデータベースのテーブル設計の基本ですのでこれのマスターは必須です。 検索で出てきたなかで分かり安そうなサイトで学習すればいいですが、とりあえず、下記のサイトの正規化の項目をお勧めしておきます。 もう一度学ぶMS-Access https://www.accessdbstudy.net/ 上記サイトはクエリやSQLについてもよくまとめられていると思います。
mnbwqz

2021/10/29 02:00 編集

再度のご回答ありがとうございます。 サイトのご教示もありがとうございます。 クロス集計クエリ、やり方分かりました。 一点、正規化後の「会議室備品テーブル」のフィールド「会議室名1」の 値は「A01」「B01」となりますでしょうか。 「A」「B」になるのかな?とも思ったのですが分かりませんでした。 よろしくお願いします。
hatena19

2021/10/29 06:23

「会議室名1」は「A」「B」ですね。 回答間違ってました。 修正しておきます。
mnbwqz

2021/10/30 06:20

ありがとうございます。 補足アドバイスも理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問