プロが教える店舗&オフィスのセキュリティ対策術

いつも大変お世話になっております。

テーブルを4つ以上結合する場合のやり方おしえてくれませんでしょうか

3つは以前教えていただきたいことがあります。

S 社員マスタ  社員コード 社員名
U 売上明細   社員コード 売上金額 状態区分
A 部署マスタ  社員コード 部署名
B 仕入テーブル 社員コード 部門

単純に増やしましたがだめでした。
strSQL = strSQL & " SELECT"
strSQL = strSQL & " S.社員コード,S.社員名,U.売上金額,U.状態区分,A.部署名"
strSQL = strSQL & " FROM("
strSQL = strSQL & " [社員マスタ$] S INNER JOIN [売上明細$] U"
strSQL = strSQL & " ON S.社員コード = U.社員コード)"
strSQL = strSQL & " INNER JOIN [部署マスタ$] A"
strSQL = strSQL & " ON U.社員コード = A.社員コード"

'--------------追加した部分です。
strSQL = strSQL & " INNER JOIN [仕入コード$] A"
strSQL = strSQL & " ON U.社員コード = B.社員コード"




strSQL = " "
strSQL = strSQL & " SELECT"
strSQL = strSQL & " S.社員コード,S.社員名,U.売上金額,U.状態区分,A.部署名"
strSQL = strSQL & " FROM("
strSQL = strSQL & " [社員マスタ$] S INNER JOIN [売上明細$] U"
strSQL = strSQL & " ON S.社員コード = U.社員コード)"
strSQL = strSQL & " INNER JOIN [部署マスタ$] A"
strSQL = strSQL & " ON U.社員コード = A.社員コード"

お時間あればおしえてくれませんでしょうか

質問者からの補足コメント

  • へこむわー

    strSQL = strSQL & " S.社員コード,S.社員名,U.売上金額,U.状態区分,A.部署名,B.部門"

    ,B.部門" 追加したカラムです。忘れてました。すみません

      補足日時:2021/01/06 15:39
  • うーん・・・

    strSQL = strSQL & " INNER JOIN [仕入コード$] A" 誤り

    strSQL = strSQL & " INNER JOIN [仕入テーブル$] A" 正しい

    申し訳ございません

      補足日時:2021/01/06 15:40
  • うーん・・・

    ありがとうございます。
    テーブル名のエイリアス(別名)
    調べました
    どこを修正したらよいか教えていただきたいです

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/01/06 16:52
  • へこむわー

    A.部署名 AS 部署名前とかでもだめでした。
    教えていただきたいです。

      補足日時:2021/01/06 17:00
  • つらい・・・

    お願い申し上げます
    何卒宜しくお願い致します。

      補足日時:2021/01/06 17:03
  • strSQL = strSQL & " SELECT"
    strSQL = strSQL & " S.社員コード,S.社員名,U.売上金額"
    strSQL = strSQL & " FROM("
    strSQL = strSQL & " [社員マスタ$] S LEFT JOIN [売上明細$] U"
    strSQL = strSQL & " ON S.社員コード = U.社員コード)"
    このコードは問題なく動作致します。
    2回にわけます。文字制限のため

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/01/06 20:42
  • うーん・・・

    kmee 様
    strSQL = strSQL & " LEFT JOIN [仕入コード$] A"
    strSQL = strSQL & " ON U.社員コード = A.社員コード"
    さっきとは少し内容がちがいます。と投稿前に
    実行したら うまくいきました。
    わけがわかりません。わたしなりに 整理します。
    ありがとうございました。

      補足日時:2021/01/06 20:45

A 回答 (4件)

まずは、自分の考えたSQLになっているかどうかを、strSQLの内容をテキスボックスとかセルとかに書き出して確認しましょう。




3つに限らず、いくつでも
??? JOIN A ON 〜
??? JOIN B ON 〜
??? JOIN C ON 〜
??? JOIN D ON 〜
??? JOIN E ON 〜
...
等と、好きなだけJOINできます。
※ 上から順番に結合するので、正しい順番に指定する必要はありますが



ExcelのSQLはよくしらないのですが。
一般的なSQLでは、() は副問合せ (サブクエリ) に使います。

・()の中だけで SQL として(SELECT文として)正しいものでなければなりません。
・()の中でテーブルに使われた別名は、()の中だけで有効です。
・FROMで使うなら、後で参照できるように、()全体に別名を付けます。

プログラムから抜きだすと
( [社員マスタ$] S INNER JOIN [売上明細$] U ON S.社員コード = U.社員コード)
となっています。これは
・SELECT として正しくありません。
・ S や U はこの中だけしか使えないのに、外で使おうとしています。
・別名が付いていません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/01/06 22:29

[仕入テーブル$] B でないのか?

    • good
    • 0
この回答へのお礼

[仕入テーブル$] B でないのか?
修正しましたが難しいですね
あきらめていました。
ありがとうございました。

お礼日時:2021/01/06 19:02

エイリアスがAで、部署マスタのエイリアスとかぶっているからでしょう。

この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/01/06 19:03

仕入コード


テーブル名が違うとか
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/01/06 19:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!