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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

6853閲覧

Aceessで1つのテーブルから複数JOINしたい

ikanefi

総合スコア7

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/04/27 11:21

前提

初めて質問させていただきます。AccessでSQLを初めて触っているものです。よって、ところどころ言葉の使い方がおかしい部分があるかもしれません。その部分含めご指摘いただけるとありがたいです。

まずはじめに今回使用するテーブルについて説明します。
M_Code M_Userという2つのテーブルがあります。

▼M_Code

KindIDName
11一般
12管理者
21
22

▼M_User
|UserName|Authority|Password|Sex|
|:--|:--:|--:|
|山田太郎|1|Tarou01|1|
|山田花子|2|Hanako01|2|
|佐藤太郎|2|Tarou02|1|
|佐藤花子|1|Hanako02|2|

実現したいこと

クエリを実行したときにM_Codeのデータをを利用して下記のような結果になるようにし、そのクエリをフォームのデータソースに設定して利用したいです。(具体的にはテキストボックスに表示)

|UserName|Authority|Password|Sex|
|:--|:--:|--:|
|山田太郎|一般|Tarou01|男|
|山田花子|管理者|Hanako01|女|
|佐藤太郎|管理者|Tarou02|男|
|佐藤花子|一般|Hanako02|女|

直面している問題

権限(Authority)のみ或いは性別(Sex)のみの表示はできるが、両方を表示することができません。具体的には下記のような状態です。

▼権限のみ思い通りに表示で来ている例
|UserName|Authority|Password|Sex|
|:--|:--:|--:|
|山田太郎|一般|Tarou01|1|
|山田花子|管理者|Hanako01|2|
|佐藤太郎|管理者|Tarou02|1|
|佐藤花子|一般|Hanako02|2|

▼性別のみ思い通りに表示で来ている例
|UserName|Authority|Password|Sex|
|:--|:--:|--:|
|山田太郎|1|Tarou01|男|
|山田花子|2|Hanako01|女|
|佐藤太郎|2|Tarou02|男|
|佐藤花子|1|Hanako02|女|

該当のソースコード

▼権限のみ思い通りに表示で来ている例のソースコード

SQL

1SELECT M_User.UserName, M.Code.Name As Authority, M.Sex 2FROM M_User LEFT JOIN M_Code ON M_User.Authority = M_Code.ID 3AND (M_Code.Kind)=1;

▼性別のみ思い通りに表示で来ている例のソースコード

SQL

1SELECT M_User.UserName, M_User.Authority, M.Code.Name As Sex 2FROM M_User LEFT JOIN M_Code ON M_User.Sex = M_Code.ID 3AND (M_Code.Kind)=2;

試したこと

いろいろと検索をしましたが、私の検索能力の低さとどのようなキーワードで検索したらよいかわからず、似たような事例を見つけることができませんでした。

補足情報(FW/ツールのバージョンなど)

Access2016使用

さいごに

これだけでは非常にわかりにくいかと思いますが、精一杯状況が伝わるように質問を書きました。どなたかお助けくださると幸いです。

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

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

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

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

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

guest

回答2

0

下記のSQLでも可能です。

SQL

1SELECT 2 M_User.UserName, 3 C1.Name, 4 M_User.Password, 5 C2.Name 6FROM 7 (M_User INNER JOIN M_Code AS C1 ON M_User.Authority = C1.ID) 8 INNER JOIN M_Code AS C2 ON M_User.Sex = C2.ID 9WHERE C1.Kind=1 AND C2.Kind=2;

ただ、別カテゴリーのAuthorityとSEXを一つのマスタにするのが、間違いですね。

▼M_Authority

IDName
1一般
2管理者

▼M_Sex

IDName
1
2

と分ければ、シンプルになりますし、処理も高速になると思います。

SQL

1SELECT 2 M_User.UserName, 3 M_Authority.Name, 4 M_User.Password, 5 M_Sex.Name 6FROM 7 (M_User INNER JOIN M_Authority ON M_User.Authority = M_Authority.ID) 8 INNER JOIN M_Sex ON M_User.Sex = M_Sex.ID;

投稿2018/04/27 12:29

hatena19

総合スコア33610

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

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

ikanefi

2018/04/27 12:32

なるほど。確かに分けたほうが分かりやすいです。ご教示くださいましてありがとうございます。
guest

0

ベストアンサー

やり方は色々ありますが、1例として。

SELECT M_User.UserName
, (SELECT M_Code.Name FROM M_Code WHERE M_Code.Kind=1 AND M_Code.ID=M_User.Authority) As Authority
, M_User.Password
, (SELECT M_Code.Name FROM M_Code WHERE M_Code.Kind=2 AND M_Code.ID=M_User.Sex) As Sex
FROM M_User;

投稿2018/04/27 11:38

編集2018/04/27 11:43
iruyas

総合スコア1067

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

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

ikanefi

2018/04/27 12:07

ありがとうございました!無事に解決することができました。本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問