• ベストアンサー

ACCESSのクエリで関数を使うときテーブルを指定しないのはなぜ?

問題集を解いています。 クエリで質問です。 [学生テーブル]から[クラス]フィールドを以下の様にIIF関数をつかってデザイングリッドに追加しています。 フィールド クラス名:IIF([クラス]=1,"A1",B1") テーブル  学生テーブル これで実行すると構文エラーになるのですが、問題集の答えをみると テーブルは空白のままです。 なぜテーブルにテーブル名を指定しないのですか?

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>フィールドに関数を使う場合はデザイングリッドのテーブルには指定しない だいたい合っているのですが、補足します。フィールドを関数などで、 加工したものは既に「テーブル内の情報」ではなくなっています。 なので、テーブル名が無いのです。但し、集計関数(SUMやCOUNT)は 特別な扱いです。でも、SUM(IIF(~))のようにすると、テーブル名は 無くなります。 >デザイングリッドのテーブルには指定しない、もしくは この文が無ければ完璧ですね。 >関数の引数に[テーブル名]![フィールド名]と書く 関数を使わない場合でも、フィールド名だけで一意に識別できない 場合はテーブル名(あるいはその別名)による修飾が必要です。 実際に生成されるSQLは必ずこうなっています。 尚、"!"はAccess特有なので、"."(ピリオド)で結合する習慣を身に 付けた方が良いでしょう。

minao9
質問者

お礼

!そうなんですね。 素晴らしい解答ありがとうございます。 ACCESSを習得するためにはやはりSQLを勉強する必要があるでしょうか? どう思われますか?

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

データベースなんでSQLは必要です。DBの設計でも、必要な情報を得る ため、SQLを想像しながらやりますからね。しかし、Access自体は フォームやレポートと言ったものも重要なので、そっちのテクも 勉強してください。でも、全てを含めて発想力が一番大事です。

minao9
質問者

お礼

ありがとうございます。 頑張りたいと思います。 またよろしくお願いいたします。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

クラス名というフィールドがテーブルに無いためです。 因みに、テーブルが1個しかないか、フィールド名"クラス"が一意で、 どのテーブルのものかを修飾する必要なく、認識できる場合はこの 書き方でOKです。しかし、テーブルが複数あり、各テーブルに同名の フィールドがある場合、単に[クラス]ではどちらのフィールドか不明 なので、IIF([学生テーブル].[クラス]=1,"A1","B1")のように修飾が 必要になります。

minao9
質問者

補足

う~んと・・。 フィールドに関数を使う場合は デザイングリッドのテーブルには指定しない、もしくは同フィールド名が複数テーブルにあってどちらのテーブルから選択する場合は、フィールドの関数の引数に[テーブル名]![フィールド名]と書く。 ということでしょうか??

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

構文エラーは引用符が閉じていないためです。 クラス名:IIF([クラス]=1,"A1",B1")        ↓ クラス名:IIF([クラス]=1,"A1","B1") >テーブルは空白のままです どういう意味でしょう? Accessクエリではテーブルは追加したり、削除したりするだけで、 フィールドのような指定のしかたはしません。

minao9
質問者

補足

>クラス名:IIF([クラス]=1,"A1",B1") >      ↓ >クラス名:IIF([クラス]=1,"A1","B1")  わたくしのタイプミスです、すみませんm(_ _)m。 [学生]テーブルにフィールド[クラス名]はあります。 デザイングリッドのフィールドに、クラス名:IIF([クラス]=1,"A1",B1") と入力したら、下のテーブルには[学生]テーブルを入力しないといけないと思ったんですが、不要なのはナゼですか? わかりやすく教えてください。

関連するQ&A