- ベストアンサー
Accessの内部結合
- Accessでcateテーブルとgoodsテーブルを内部結合する方法について
- 内部結合についての動作確認と、VBAを使わずに標準のクエリデザインで特定の条件で結合する方法について
- クエリデザインでテストクエリを作成し、その結果とcateテーブルを結合して解決する方法について
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
クエリ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 かな?
その他の回答 (2)
- DexMachina
- ベストアンサー率73% (1287/1744)
> しかしながら、動きませんでした。 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条件句の両辺をともに文字列型に 統一しています。
お礼
ありがとうございます!無事に解決しました!感謝感謝です!
- bin-chan
- ベストアンサー率33% (1403/4213)
select * from goods where left(goods.cateid,5) in (select id from cate) ; ではどうでしょう? デザインビューをSQLビューに切り替えて、上記をコピペしてから デザインビューに戻してみてください。
お礼
ありがとうございます!無事に解決しました!感謝感謝です!
お礼
ありがとうございます!無事に解決しました!感謝感謝です!