• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessの内部結合)

Accessの内部結合

このQ&Aのポイント
  • Accessでcateテーブルとgoodsテーブルを内部結合する方法について
  • 内部結合についての動作確認と、VBAを使わずに標準のクエリデザインで特定の条件で結合する方法について
  • クエリデザインでテストクエリを作成し、その結果とcateテーブルを結合して解決する方法について

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

クエリ1を作ります SELECT Left(cateid,3) AS xx, Goods.* FROM Goods このクエリ1とCate テーブルを繋げて SELECT [クエリ1].* FROM クエリ1 INNER JOIN Cate ON [クエリ1].xx = Cate.ID やれば結果が得られるかと思います。 ひとつにまとめるのはクエリのデザインビューでは限界ですが SQLビューでは、このようになります。 SELECT T2.* FROM (SELECT Left(T1.cateid,3) AS xx, T1.* FROM Goods AS T1) AS T2 INNER JOIN Cate ON T2.xx = Cate.ID かな?

mellow91
質問者

お礼

ありがとうございます!無事に解決しました!感謝感謝です!

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

> しかしながら、動きませんでした。 goodsテーブルのcateid及びcateテーブルのidは、数値型なのでは ないでしょうか。 (この推測が正しければ、「型が一致しません」というエラーが出ていた  と思います) 提示のSQL文を、以下のように改修してみてください: <現在> select * from goods inner join cate on left(goods.cateid,5) = cate.id; <修正> select * from goods inner join cate on left(goods.cateid,5) = CStr(cate.id); 【解説】 今回使われたLeft関数は、第1引数に数値を指定した場合でも、 戻り値としては文字列型の値を返します。 そのため、   goods.cateid = cate.id では「数値型 = 数値型」の比較となるので動作していたものが、   left(goods.cateid) = cate.id では「文字列型 = 数値型」の比較となるため、上述のエラーになる、 ということです。 これを回避するため、上記修正案では、データの型を文字列型に 変換するCStr関数を使用し、Where条件句の両辺をともに文字列型に 統一しています。

mellow91
質問者

お礼

ありがとうございます!無事に解決しました!感謝感謝です!

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

select * from goods where left(goods.cateid,5) in (select id from cate) ; ではどうでしょう? デザインビューをSQLビューに切り替えて、上記をコピペしてから デザインビューに戻してみてください。

mellow91
質問者

お礼

ありがとうございます!無事に解決しました!感謝感謝です!

関連するQ&A