Access2003でのJOIN操作に関する構文エラーの解決方法

このQ&Aのポイント
  • Access2003のクエリでJOIN操作を行う際に「JOIN操作の構文エラー」というエラーメッセージが表示される場合の解決方法をご紹介します。
  • 具体的には、tbAを基に、tbBとtbCに存在するデータを抽出するためのクエリに、tbD内の商品コードと取引先コードの存在条件を追加する必要があります。
  • 以下のSQL文を使用してJOIN操作を実行してください: SELECT tbA.* FROM ((tbA LEFT JOIN tbB ON tbA.商品コード = tbB.商品コード) LEFT JOIN tbC ON tbA.取引先コード = tbC.取引先コード) LEFT JOIN tbD ON tbB.商品コード = tbD.商品コード AND tbC.取引先コード = tbD.取引先コード
回答を見る
  • ベストアンサー

access2003 クエリSQL文について

「JOIN操作の構文エラー」というメッセージがでてしまいます。 やりたいことは、 tbAを基に、tbB、tbCに存在するデータを抽出する。 さらに、tbB、tbCの商品コード、および取引先コードは、tbDに存在すること、です。 SELECT tbA.* FROM ((tbA LEFT JOIN tbB ON tbA.商品コード = tbB.商品コード) LEFT JOIN tbC ON tbA.取引先コード = tbC.取引先コード) LEFT JOIN tbD ON tbB.商品コード = tbD.商品コード AND tbC.取引先コード = tbD.取引先コード よろしくお願いします。

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

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

LEFT JOIN tbD ON tbB.商品コード = tbD.商品コード AND tbC.取引先コード = tbD.取引先コード ONのあと、ANDはOKでしたか?確認してみます。 whereならOKですが…。

idera_2010
質問者

お礼

お礼が遅くなり申し訳ございません。 解決しました。 ありがとうございました。

その他の回答 (1)

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.2

ONの中でANDを使用することはできそうですが、以下のヘルプを参照すると、AND ONとなっているのが気になります。 http://office.microsoft.com/ja-jp/access-help/HP001032241.aspx?CTT=1

idera_2010
質問者

お礼

お礼が遅くなり申し訳ございません。 解決しました。 ありがとうございました。

関連するQ&A

  • SQL文を教えて下さい

    VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。     売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。     得意先マスタの全得意先を取得する必要があります。     すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称,       クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名  FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。

  • 仕様が難しくてSQL文が作れません(新人プログラマ

    予約明細テーブルと貸出明細テーブルの2つがあります。 この2つのテーブルから以下の項目を抽出するSQL文がわかりません 貸出先:予約明細と貸出明細のうち直近(システム日付からの)の貸出先 ※予約明細と貸出明細には貸出期間開始日と貸出期間終了日があります。 貸出期間:上記明細の貸出期間(貸出先で抽出した貸出期間開始日、貸出期間終了日) 会場:予約明細の時のみ上記明細の会場 担当 上記明細の登録担当者 という項目を抽出するSQL文がわかりません 自分なりに考えた結果が以下のSQL文です。新人プログラマのため間違っていると思うので ご指摘願います。 SELECT 貸出先, 貸出期間開始日~貸出期間終了日 AS 貸出期間, 会場, 担当 FROM 商品 LEFT JOIN 予約明細 ON 商品コード = 商品コード (商品テーブルと予約明細テーブルは商品コードで結合します) LEFT JOIN 貸出明細 ON 商品コード = 商品コード (商品テーブルと貸出明細テーブルは商品コードで結合します) WHERE ここからがまったくわかりません。 SQL文だけでは抽出する事は不可能なのでしょうか VB.netで開発しているのですがVB側で処理しなければいけない 項目もありますでしょうか SQL文(とVB)のコードでのご回答宜しくお願いいたします。 環境 VB2005 SQLServer2005

  • SQL文について質問です。

    SQL文について質問です。 取引先マスターを作成しています。 その際に T_取引先マスターに一つのテーブルから2つの フィールドを抽出する方法をアドバイス下さい。 T_Agentには営業マンとアシスタントの名前が格納されています。 T_Companyには営業マン用フィールドとアシスタント用フィールドがあります。 T_Agentから営業マンとアシスタントの名前を取り出すにはどのしたらよろしいですか? フロム句に以下を入れるとエラーになります。 FROM (T_Company AS Com LEFT JOIN T_Agent AS Agen ON Com.Agent = Agen.ID) LEFT JOIN (SELECT * FROM T_Agent WHERE PositionName = "アシスタント") AS T_Assistant ON T_Company.Assistant = T_Assistant.ID アドバイスよろしくお願いいたします。

  • Accessの表結合SQL

    AccessのSQLで外部結合を複数使うと SQLがエラーになります。 クエリで確認してエラーにならない様につくってみましたが、意図する事をやろうとするとエラーになります。 どこが悪いか教えていただけませんか?おそらくSQLサーバーでは余裕で通るSQLだと思うのですが。。。 SQL = SELECT * FROM T1 LEFT JOIN T2 ON T1.A = T2.A LEFT JOIN T3 ON T1.B = T3.B LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' やりたいのはT1を基準にT2,T3,T4からデータを引っ張ってきたい。その条件としてT4から引っ張ってくるのは T4.DがiNumである事、基準となるT1のT1.EがiNumである事です。 Accessでは"AND T4.D = iNum"がだめで、 WHERE区に書くと外部結合にもかかわらずT4.D = iNumのデータしか抽出されなくなる。(T1.C = T4.CのデータがT4.D = iNumでなくてもT1のデータが抽出されなくてはならない。) さらに SQL = SELECT * FROM ((T1 LEFT JOIN T2 ON T1.A = T2.A) LEFT JOIN T3 ON T1.B = T3.B) LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' こんな括弧が必要になってくる。 これだとT1とT2を外部結合した結果をT3と外部結合して さらにその結果をT4と外部結合しているという意味あいになってしまって、意図が違うのですが。。 結果は同じなのでAccessに譲ってやってもいいのですが 前者はT1で抽出されなければならないデータが抽出されないので困ります。 よろしくお願いいたします。

  • access の UPDATE のSQL文教えてください

    お世話になります。 仕訳抽出 (キー無し)の勘定科目別の金額を勘定科目毎に集計して仕訳集計(キー項目:勘定科目)の金額を更新するSQL文です。 1つ目はOK ですが 2つ目で「構文エラー:演算子がありません」となります。 DoCmd.RunSQL "UPDATE 仕訳集計 set 金額=0 " DoCmd.RunSQL "UPDATE 仕訳集計 " _ & " INNER JOIN 仕訳抽出 ON 仕訳集計.勘定科目 = 仕訳抽出.勘定科目" _ & " SET 仕訳集計.金額 = SUM(仕訳抽出.金額) Group by 仕訳抽出.勘定科目;"

  • SQL文の書き方(こんなこと出来ますか)

    テーブルA(ID、A,B,中身) テーブルa(A、コードの名前1) テーブルb(B、コードの名前2) ID、A、コードの名前1、B、コードの名前2、中身という風に結果を得たいのですが、Aがテーブルaに存在する、又はBがテーブルbに存在するものを出力したいのですがJoinが良く分かりません。aまたはbに存在しない時はコードの名前はNullにしたく、また抽出されテーブルAのレコードが重複しないようにしたいのですが、考えても分かりません。ご教授下さるようお願い致します。

    • ベストアンサー
    • MySQL
  • このSQL文を教えてください。

    Windows2000(SP3) SQLServer2000(SP3) で開発しています。 テーブルA 項目No,大分類コード,中分類コード,詳細コード,日付,内容 テーブルB 大分類コード,中分類コード,詳細コード,新_詳細コード,内容 TableA,Bでは大分類コード,中分類コード,詳細コードがリンクする このような状況で、TableA,Bを下記のようにjoinして、  TableA.大分類コード,   TableA.中分類コード,  TableB.新_詳細コード, が重複するデータを取得する場合のSQL文を教えてください。 (join) SELECT  TableA.*,  TableB.* FROM  TableA LEFT OUTER JOIN  TableB ON  TableA.大分類コード=TableB.大分類コード  AND  TableA.中分類コード=TableB.中分類コード  AND  TableA.詳細コード=TableB.詳細コード よろしくお願いします。

  • left outer joinで抽出したい

    SELECT (TABLE1 INNER JOIN TABLE2 ON TABLE1.CODE = TABLE2.CODE) INNER JOIN TABLE3 ON TABLE1.JAN = TABLE3.JAN というSQL文があります。この文を変更して下記の条件での抽出をおこないたいと思います。 ■TABLE1.JANを元にする。 ■TABLE1.JAN = TABLE3.JANは抽出に含めない ■TABLE1.JANに存在していて、TABLE3.JANに存在しないJANをTABLE1.JANから抽出 このようなSQL文をかきたいのですが、どのようなSQL文にしたらよいでしょうか? left outer joinを使えばいいとは思うのですが、そこから先が思い浮かびません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文の書き方について

    SQL初心者です。 教えてください。 A表とB表があります。 A表の伝票Noの列の値とB表の伝票Noの列の値はイコールです。 判定はB表のある別のカラム(sample)と変数Zに格納されている値がイコールという 条件で合致するA表のデータを抽出したいです。 LEFT JOINもしくはINNER JOINなどを使って書けば良いのでしょうか? 例えば SELECT * from A表 INNERJOIN B表 on A表.伝票No = B表.伝票No where B表.sample = 変数Z などと書けば良いのでしょうか?

  • SQL文で2つのSELCT文の結果を繋げる方法

    SQL文で2つのSELCT文の結果を繋げる方法はありますでしょうか。 Left Join でもと思ったのですが、片側にしかないのも、1レコードとして出力したいです。 テーブルの例と出力の理想は以下です。 また、上記の応用でこれを4テーブル(SELECT文)を繋げて、下記例で言うと、日付と商品コードがキーで、どのテーブルに存在しても、結果を1行で返せるでしょうか。 【テーブル1(SELECT文1)】 F_仕入 伝票日付 商品コード 仕入金額 2014/07/01 101     10,000 2014/07/02 102     15,000 2014/07/05 104 20,000 【テーブル2(SELECT文2)】 F_売上 伝票日付 商品コード 売上金額 2014/07/01 101     15,000 2014/07/02 102     25,000 2014/07/03 103 13,000 上記2つのSELECT結果 伝票日付  商品コード 仕入金額 売上金額 2014/07/01 101 10,000 15,000 2014/07/02 102 15000 25,000 2014/07/03 103 13,000 2014/07/05 104 20,000 よろしくお願いします。