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

strSQL = strSQL & " SELECT M.顧客番号 AS 顧客番号 , M.支店番号 AS 支店番号 , S.支店名 AS 支店名 , T.売上 AS 売上 "
strSQL = strSQL & " FROM[顧客マスタ$] M INNER JOIN [支店マスタ$] S "
strSQL = strSQL & " ON M.顧客番号 = S.顧客番号 "
strSQL = strSQL & " FROM[顧客マスタ$] M INNER JOIN [データ$] T "
strSQL = strSQL & " ON M.顧客番号 = T.顧客番号 "
strSQL = strSQL & " WHERE M.顧客番号 = '" & Range("A2") & "'"

[顧客マスタ$] M   [支店マスタ$] S    [データ$] T 
顧客番号がKEYです。
これを上記のように
" SELECT M.顧客番号 AS 顧客番号 , M.支店番号 AS 支店番号 , S.支店名 AS 支店名 , T.売上 AS 売上 "のように抽出したいですが
うまくいきません

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

  • どう思う?

    strSQL = strSQL & " ON M.顧客番号 = S.顧客番号 "
    strSQL = strSQL & " FROM[顧客マスタ$] M INNER JOIN [データ$] T "
    strSQL = strSQL & " ON M.顧客番号 = T.顧客番号 "
    演算子がありませんと表示されます。

      補足日時:2018/05/09 18:46
  • うーん・・・

    strSQL = strSQL & " SELECT m.住所 as 住所 , m.顧客番号 as 顧客番号, s.支店名 as 支店名 , t.売上 as 売上 "
    strSQL = strSQL & " FROM "
    strSQL = strSQL & " [顧客マスタ$] m INNER JOIN [支店マスタ$] s INNER JOIN [データ$] t "
    strSQL = strSQL & " ON m.顧客番号 = s.顧客番号 = t.顧客番号 "
    strSQL = strSQL & " where m.顧客番号 = '" & Range("a2") & "'"
    申し訳ございません
    まちがってるところ教えてください。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/05/12 20:23

A 回答 (5件)

>うまくいきません



どう言う結果になって「うまくいきません」なのか、そこが分からないと解説しようもありませんん。
    • good
    • 1
この回答へのお礼

有難うございました。

お礼日時:2018/05/09 20:13

FROM[顧客マスタ$] M が2つあるのは何故ですか?

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

紐づけするためになりましたがなかなか
勝手に自分で考えてやりましたが、
手本がないため、自己流です。

お礼日時:2018/05/09 22:11

> 紐づけするためになりましたがなかなか


> 勝手に自分で考えてやりましたが、
> 手本がないため、自己流です。

それなら、まずは本屋でSQLの入門書を探してみましょう。


1つのSELECTに対して、FROM は一つです。

FROM A JOIN B
のような感じで FROM と JOIN をセットにして覚えてしまっているのでは?
これは
FROM 「A JOIN B」 (AとBを結合したものから選択)
という意味です。「FROM A JOIN B」というセットではありません。

テーブルはいくつでも結合できます。
FROM A JOIN B JOIN C
のように書けば
FROM 「A JOIN B JOIN C」 (AとBを結合したものにCを結合したものから選択)
の意味になります。
※ INNER等と、ONの条件は省略して書いています。
この回答への補足あり
    • good
    • 0

何点か。



INNER JOIN は、 2つのテーブル(状のものを)を組合せるのに、ON で条件を指定する必要があります。
 [顧客マスタ$] m INNER JOIN [支店マスタ$] s
で2つのテーブルを結合するので、この直後に m と s とを結び付けるための ON 句が必要です。
そうしてできた 「 [顧客マスタ$] m INNER JOIN [支店マスタ$] s ON 〜 」に
「INNER JOIN [データ$] t」し、その前までに結合されたテーブルと結び付けるための ON を指定します。

前回省略しましたが、 ON の書く位置や内容が重要です。


m.顧客番号 = s.顧客番号 = t.顧客番号
プログラミング初心者がよくやる間違いです。
これは「 m.顧客番号 と s.顧客番号 と t.顧客番号とが等しい」という意味では**あ*り*ま*せ*ん***
ここで = は「左右が同じなら 『真』を表わす値、そうでないなら『偽』を表わす値」という「計算」をする演算子です。
m.顧客番号 = s.顧客番号 = t.顧客番号

『真』= t.顧客番号 または 『偽』= t.顧客番号
という途中計算になります。おそらく上記は『偽」になるでしょう。


何か、本は読みましたか?
3つのテーブルの結合くらいだったら、例文が載ってると思うのですが。
    • good
    • 0

https://oshiete.goo.ne.jp/qa/10483969.html

こちらの質問で回答してみたコード(だいぶ余計に書きましたがSQL文についてはリンク先と併せているはずです)について、
検証結果報告はないままに次の質問に移っているようですが、元々こちらで先に質問を立てていたのですね。

結果としては3つほどの質問を立てているようですがどれについても修正した書き方は提示されているのに、
その検証はされないのでしょうか?
    • good
    • 1

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

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A