プロが教えるわが家の防犯対策術!

お知恵を貸してください。
ACCESSでSQLステートメントで

『Aテーブル』
ID  商品コード1 商品コード2
1    1111    2222
2    2222    3333
3    4444    5555  

『Bテーブル(商品コードマスター)』
商品コード  商品名
1111     ああああ
2222     いいいい      
3333     うううう
4444     ええええ
5555     おおおお

AテーブルとBテーブルを結合して
ID  商品コード1 商品名    商品コード2   商品名
1    1111  ああああ     2222    いいいい
2    2222  いいいい     3333    うううう
3    4444  ええええ     5555    おおおお

というCテーブルを作りたいです。

商品コード1と商品コード2の両方共 Bテーブルの商品コードから商品名を取得したいのですが、できないのですが・・・・
出来ればBテーブル(商品コード)を2つ作くったり等したくないのですが、SQLステートメントでどう記述すれば良いですか?


     

A 回答 (3件)

> 2つ作ったり等したくないのですが



同一内容のテーブル(つーかオブジェクト)を複数作りたくないと
解釈しましたが、それでも大丈夫でしょうか?

であれば、Bテーブルのエイリアスを使えば以下のように可能です。

select Aテーブル.id, Aテーブル.商品コード1, Bテーブル.商品名, Aテーブル.商品コード2, Bテーブル_1.商品名
from (Aテーブル inner join Bテーブル on Aテーブル.商品コード1 = Bテーブル.商品コード)
inner join Bテーブル as Bテーブル_1 on Aテーブル.商品コード2 = Bテーブル_1.商品コード;

この回答への補足

ご回答ありがとうございます。
エイリアスって、どう意味でしょうか?
あと
『Bテーブル_1』の『_1』というのは、よくACCESSのデザインビューで
同じテーブルを表示するとよくテーブル名に、『_1』『_2』『_3』・・・・
とついていくのと同じ意味でしょうか・・・。
重ねて質問してしまって申し訳ないですが、お答えいただければ嬉しいです。

補足日時:2006/11/14 17:53
    • good
    • 0

No2さんの回答を SQL 文にて実行しCテーブルを作成してみました。



<C>
ID  商品コード1 B_商品名  商品コード2 B_1_商品名
1   1111    ああああ   2222    いいいい
2   2222    いいいい   3333    うううう
3   4444    ええええ   5555    おおおお

このような結果を得ました。

Private Sub コマンド0_Click()
  Dim isOK  As Boolean
  Dim strSQL As String
  
  strSQL = "SELECT A.ID, A.商品コード1, B.商品名, A.商品コード2, B_1.商品名 " & _
       "INTO C " & _
       "FROM (A LEFT JOIN B ON A.商品コード1 = B.商品コード) LEFT JOIN B AS B_1 ON A.商品コード2 = B_1.商品コード;"
  isOK = CnnExecute(strSQL)
  If isOK Then
    MsgBox "テーブルCを生成しました。"
  End If
End Sub

なお、CnnExecute() は ADODB.Connection の Execute メソッドを利用して SQL文を実行するというものです。
    • good
    • 0
この回答へのお礼

分かりやすくご回答ありがとうございます。
勉強になりました★

お礼日時:2006/11/15 12:12

クエリデザインビューにBテーブルを2回取り込み


1つを商品コード1にもうひとつを商品コード2に結合します

リレーションシップウィンドウでも同様です
    • good
    • 0
この回答へのお礼

ご回答有難うございます。
勉強になりました。

お礼日時:2006/11/15 12:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す