- ベストアンサー
ACCESSのクエリで関数を使うときテーブルを指定しないのはなぜ?
問題集を解いています。 クエリで質問です。 [学生テーブル]から[クラス]フィールドを以下の様にIIF関数をつかってデザイングリッドに追加しています。 フィールド クラス名:IIF([クラス]=1,"A1",B1") テーブル 学生テーブル これで実行すると構文エラーになるのですが、問題集の答えをみると テーブルは空白のままです。 なぜテーブルにテーブル名を指定しないのですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>フィールドに関数を使う場合はデザイングリッドのテーブルには指定しない だいたい合っているのですが、補足します。フィールドを関数などで、 加工したものは既に「テーブル内の情報」ではなくなっています。 なので、テーブル名が無いのです。但し、集計関数(SUMやCOUNT)は 特別な扱いです。でも、SUM(IIF(~))のようにすると、テーブル名は 無くなります。 >デザイングリッドのテーブルには指定しない、もしくは この文が無ければ完璧ですね。 >関数の引数に[テーブル名]![フィールド名]と書く 関数を使わない場合でも、フィールド名だけで一意に識別できない 場合はテーブル名(あるいはその別名)による修飾が必要です。 実際に生成されるSQLは必ずこうなっています。 尚、"!"はAccess特有なので、"."(ピリオド)で結合する習慣を身に 付けた方が良いでしょう。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
データベースなんでSQLは必要です。DBの設計でも、必要な情報を得る ため、SQLを想像しながらやりますからね。しかし、Access自体は フォームやレポートと言ったものも重要なので、そっちのテクも 勉強してください。でも、全てを含めて発想力が一番大事です。
お礼
ありがとうございます。 頑張りたいと思います。 またよろしくお願いいたします。
- nda23
- ベストアンサー率54% (777/1415)
クラス名というフィールドがテーブルに無いためです。 因みに、テーブルが1個しかないか、フィールド名"クラス"が一意で、 どのテーブルのものかを修飾する必要なく、認識できる場合はこの 書き方でOKです。しかし、テーブルが複数あり、各テーブルに同名の フィールドがある場合、単に[クラス]ではどちらのフィールドか不明 なので、IIF([学生テーブル].[クラス]=1,"A1","B1")のように修飾が 必要になります。
補足
う~んと・・。 フィールドに関数を使う場合は デザイングリッドのテーブルには指定しない、もしくは同フィールド名が複数テーブルにあってどちらのテーブルから選択する場合は、フィールドの関数の引数に[テーブル名]![フィールド名]と書く。 ということでしょうか??
- nda23
- ベストアンサー率54% (777/1415)
構文エラーは引用符が閉じていないためです。 クラス名:IIF([クラス]=1,"A1",B1") ↓ クラス名:IIF([クラス]=1,"A1","B1") >テーブルは空白のままです どういう意味でしょう? Accessクエリではテーブルは追加したり、削除したりするだけで、 フィールドのような指定のしかたはしません。
補足
>クラス名:IIF([クラス]=1,"A1",B1") > ↓ >クラス名:IIF([クラス]=1,"A1","B1") わたくしのタイプミスです、すみませんm(_ _)m。 [学生]テーブルにフィールド[クラス名]はあります。 デザイングリッドのフィールドに、クラス名:IIF([クラス]=1,"A1",B1") と入力したら、下のテーブルには[学生]テーブルを入力しないといけないと思ったんですが、不要なのはナゼですか? わかりやすく教えてください。
お礼
!そうなんですね。 素晴らしい解答ありがとうございます。 ACCESSを習得するためにはやはりSQLを勉強する必要があるでしょうか? どう思われますか?