- ベストアンサー
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ステートメントでどう記述すれば良いですか?
- みんなの回答 (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.商品コード;
その他の回答 (2)
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文を実行するというものです。
お礼
分かりやすくご回答ありがとうございます。 勉強になりました★
- CHRONOS_0
- ベストアンサー率54% (457/838)
クエリデザインビューにBテーブルを2回取り込み 1つを商品コード1にもうひとつを商品コード2に結合します リレーションシップウィンドウでも同様です
お礼
ご回答有難うございます。 勉強になりました。
補足
ご回答ありがとうございます。 エイリアスって、どう意味でしょうか? あと 『Bテーブル_1』の『_1』というのは、よくACCESSのデザインビューで 同じテーブルを表示するとよくテーブル名に、『_1』『_2』『_3』・・・・ とついていくのと同じ意味でしょうか・・・。 重ねて質問してしまって申し訳ないですが、お答えいただければ嬉しいです。