Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2010)
1レコード内に別々のキーを使って同一テーブルを複数参照するSQL
投稿日時: 19/11/11 16:18:43
投稿者: wh

2つのテーブルをINNER JOINで結合して複数参照しようと、以下のようにしてみましたが出来ませんでした。
 
関数を使えば出来ると思いますが、SQL文で完結できる何か良い方法はないでしょうか?
 
テーブルA
KEY 整数型
区分1 整数型
区分2 整数型
区分3 整数型
 
テーブルB
区分 整数型
名称 テキスト型
 
SELECT テーブルA.KEY, 区分1, B1.名称, 区分2, B2.名称, 区分3, B3.名称
FROM ( ( テーブルA
INNER JOIN テーブルB AS B1 ON テーブルA.区分1 = テーブルB.区分 )
INNER JOIN テーブルB AS B2 ON テーブルA.区分2 = テーブルB.区分 )
INNER JOIN テーブルB AS B3 ON テーブルA.区分3 = テーブルB.区分
;
 
テーブルA
---+-----+-----+-----+
 1 | 11 | 21 | 0 |
 2 | 21 | 0 | 51 |
 3 | 31 | 41 | 0 |
---+-----+-----+-----+
 
テーブルB
---+----+
11 | A |
21 | B |
31 | C |
41 | D |
51 | E |
---+-----+
 
求めている結果
---+----+---+----+---+----+---+
 1 | 11 | A | 21 | B | 0 | |
 2 | 21 | B | 0 | | 51 | E |
 3 | 31 | C | 41 | D | 0 | |
---+----+---+----+---+----+---+
 

回答
投稿日時: 19/11/11 17:08:43
投稿者: sk

引用:
SELECT テーブルA.KEY, 区分1, B1.名称, 区分2, B2.名称, 区分3, B3.名称
FROM ( ( テーブルA
INNER JOIN テーブルB AS B1 ON テーブルA.区分1 = テーブルB.区分 )
INNER JOIN テーブルB AS B2 ON テーブルA.区分2 = テーブルB.区分 )
INNER JOIN テーブルB AS B3 ON テーブルA.区分3 = テーブルB.区分
;

SELECT [テーブルA].[KEY],
       [テーブルA].[区分1],
       B1.[名称] AS [名称1],
       [テーブルA].[区分2],
       B2.[名称] AS [名称2],
       [テーブルA].[区分3],
       B3.[名称] AS [名称3]
FROM ( ( [テーブルA]
LEFT JOIN [テーブルB] AS B1 ON [テーブルA].[区分1] = B1.[区分] )
LEFT JOIN [テーブルB] AS B2 ON [テーブルA].[区分2] = B2.[区分] )
LEFT JOIN [テーブルB] AS B3 ON [テーブルA].[区分3] = B3.[区分]
ORDER BY [テーブルA].[KEY];
 
------------------------------------------------------------------
 
・内部結合ではなく外部結合を用いる。
 
・テーブルの別名を使う場合は ON 句での結合式における
 左辺/右辺のテーブル/フィールドの名前を正しく指定する。

投稿日時: 19/11/12 08:58:34
投稿者: wh

sk 様
 
有難うございました。
 
LEFT JOINまで試していなかったのがだめでした。
表示列に B1.名称 は指定していたのに別名を指定しておらず、結合時の右辺もテーブルの別名を指定しないなど後から見直すとかなり多くの抜けがありました。
 
お騒がせしましたが無事解決として、このスレッドは閉じさせて頂きます。