みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access SQL [ ]やピリオドの有無の違い

AccessのVBAのコードを見ているのですが、
コードの中のSQLの記述で、
よく分からないことがありますので教えてください。

strSQL = "UPDATE XXX " & _
"INNER XXX " & _
"[SELECT XXX.XXXX, XXX.XXXX,…XXX.XXXX " & _
" FROM XXX " & _
" WHERE ((XXX.XXXX)='" & XX & "') " & _
" AND ((XXX.XXXX)='" & XX & "') " & _
" AND ((XXX.XXXX) =1))]. AS YYY " & _
"ON (XXX.XXXX = YYY.YYYY) " & _
"AND (XXX.XXXX = YYY.YYYY) " & _
"AND (XXX.XXXX = YYY.YYYY) " & _
"AND (XXX.XXXX = YYY.YYYY) " & _
"SET XXX.YYYY = YY "

(注記) XXX,YYYYなどは、テーブル名、フィールド名などですが、
    同じXXXXとXXXXでも年と月のように別のフィールド名です

というような記述があるのですが、

(問1) サブクエリの部分の[ ]ですが、
   私がこれまで見てきたサブクエリは
   ( )が使われていたのですが、
   ( )と[ ]とでは、
   何か違いがあるのでしょうか。

(問2) 別名の部分の[ ]. AS YYYですが
   私がこれまで見てきた別名は
   [ ] AS YYYというように
   ピリオド(.)は付いていなかったのですが、
   ピリオド(.)が付いていない場合と
   ピリオド(.)が付いている場合とでは、
   何か違いがあるのでしょうか。

(問3) (問1)とよく似ていますが、
   サブクエリではなくフィールド名
   または、テーブル名.フィールド名に
   [ ]が付いているのを時々見かけます。
   例えば、
   IIf([XXXX] Is Null,0,[XXXX])…
   SELECT Max(IIf(Val([XXX].[XXXX])<4,Val([XXX].[XXXX])…
   などですが、たまたま、関数の中にあるだけなのか、
   関数の中だけで別の意味になるのかはよく分かりません。
   [ ]が付いていない場合と
   [ ]が付いている場合とでは、
   何か違いがあるのでしょうか。

(Microsoft Access 2010)
(Windows7)

よろしくお願いします。

投稿日時 - 2016-12-01 09:53:03

QNo.9262514

困ってます

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

(問1)(問2)

サブクエリを [ ]. で囲むというのは Access(JET)独自の方言ですね。
( ) で囲むのが標準のSQLです。 [ ]. はネストできないし、標準とは外れますので、あまり使われません。
[ サブクエリのSQL ] AS YYY はエラーになるはずです。

(問3)
フィールド名やテーブル/クエリ名を [ ] で囲んでも、囲まなくても意味は同じです。
ただ、名前が空白を含む場合や予約語の場合、裸ではエラーになりますので[ ]で囲む必用があります。

投稿日時 - 2016-12-01 10:34:23

お礼

(問2)の
>私がこれまで見てきた別名は
>[ ] AS YYYというように
>ピリオド(.)は付いていなかったのですが、
の[ ] AS YYYの部分は、
( ) AS YYYの誤りでした。

Accessではサブクエリを [ ]. で囲むという
仕様だったんですね。
Access独自ということと( )より使い勝手が悪く
あまり使われないということなので、
( )の方を使うようにします。

名前が空白を含む場合や予約語の場合でも、
エラーにならないように
[ ]で囲ってあったのですね。

これで疑問点が解決しました。
ありがとうございました。

投稿日時 - 2016-12-02 08:22:00

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

私見で、誤りかもわかりません。

先ずカンマとピリオッドですが
カンマはフィールド区切りでピリオッドはフィールドがどのテーブルのものかを表します。
すなわちピリオッドの左がテーブル名で右がフィールド名、クエリー内でフィールド名がユニークであればテーブル名は省略できます。
()は数学で使う時とほぼ同じです。[]はテーブル名またはフィールド名に付けて表現をより分かり易くするためで省略可能です。

投稿日時 - 2016-12-01 20:35:06

お礼

[ ]は表現をより分かり易くするためということですね。
ありがとございました。

投稿日時 - 2016-12-02 08:21:14

あなたにオススメの質問