• ベストアンサー

ACCESS SQLステートメントについて初心者です。

お知恵を貸してください。 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ステートメントでどう記述すれば良いですか?      

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> 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.商品コード;

noname#22811
質問者

補足

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

その他の回答 (2)

noname#22222
noname#22222
回答No.3

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文を実行するというものです。

noname#22811
質問者

お礼

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

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

クエリデザインビューにBテーブルを2回取り込み 1つを商品コード1にもうひとつを商品コード2に結合します リレーションシップウィンドウでも同様です

noname#22811
質問者

お礼

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

関連するQ&A