• 締切済み

SQLの[ ] は?

ひとつどうしても気になる事があります。 Access97でSQL文を作ってるのですが、どうしても[]が 付くんです。 例えば 1:"SELECT [BACKUP-2].住所1 FROM [BACKUP-2]" って感じです。 別のテーブルは 2:"SELECT BACKUP-1.住所1 FROM BACKUP-1" で動きます。 これって何が違うのでしょうか?1は[ ]をとると 構文エラーとなって動いてくれません。 どうしても気になってしかたないのですが。 理由を教えてください。

みんなの回答

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.3

ちなみに普通のRDBMSでは区別のときに[]は使わないですね。 MSのアクセス固有の表示だと思います。 アクセスのクエリを作るときに、ビルドを使うと思うのですが、テーブル名を指定してからフィールドを選択すると[]はつかないですよね。 テーブルやクエリを指定しないでフィールドを指定するときは[]でテーブルやクエリを指定しないとフィールドを指定できません。 これは[]で無理やりテーブルやクエリを指定できますよということだと思います。 (以前に作ったクエリーを使用しようとした場合、一度セーブしないと使えませんので注意してください。) アクセスはまだまだ訳のわからんエラーで落ちますので、こまめな保存が必要です。半日分の作業がなくなったりしますので注意してください。

BOLTS
質問者

お礼

たしかにアクセスって結構不安定な気がします。 いきなりテーブル参照が出来なくなったり過去何度 泣かされたことか。バックアップ気をつけます。 ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

テーブル名のハイフンが問題だと思われます。 テーブル名、フィールド名などに半角のハイフン(-)が用いられている場合 ACCESSのSQLはそれを名前の一部ではなく意味のある記号(つまりマイナス) と判断してしまいますので、半角ハイフンを含んだ名称を認識させるために 前後に [ ] をつける必要があり、ACCESSが自動的に付加する形になります。 半角スペースを含んだ名前なども同じですね。 (こちらはスペースの場所で名前が終わっていると見なされる) BACKUP-1の方のSQLが上手く動く理由は分かりませんが 長音(ー)や全角ハイフン(-)であれば単なる文字と見なされますし 外部のデータベースに接続するパススルークエリなどであった場合は SQLの文法が変わってくる事があります。

BOLTS
質問者

お礼

ずばりのご指摘ありがとうございます。 なんとか疑問解決です。 そんな細々したことがよくわかりません。 助かりました。

すると、全ての回答が全文表示されます。
noname#25230
noname#25230
回答No.1

手元にACCESSが無いのでなんともいえませんが、同じくマイクロソフトの業務用データベースである「SQL Server」では、列の名前として「普通は使えなさそうな文字」、たとえば記号とか、が含まれる場合に、大括弧で囲むんだったと記憶しています。 もしかしたら、ハイフンか何かがそのままでは読んでもらえないので、自動的に括弧を付けてくれているのかな?とも思うのですが、片方ではうまくいくってのがよくわかりませんね。 でもまぁ、そのあたり、列名による現象ではないか?というアプローチで調べて見られてはいかがでしょうか?

BOLTS
質問者

お礼

ありがとうございます。 どうも2の-が普通の-と違ったみたいです。 1の-を消してみたら確かに消えました。 じゃあもう一個試したスラッシュも同じ理由なのでしょうね。 どうもそれらしいです。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A

  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • SQL文について

    開発言語:VB2010 DB:SqlServer2005 及び ACCESS2007 SQLサーバーのテーブルをAccessのテーブルへINSERTしたいのですが、 一文で行う事は可能でしょうか? (テーブルの構造は全く同じです) 同じDB内であれば、下記のような感じで出来ると思うんですが。 +----------------------------------+ INSERT into Atest_ACCESS SELECT * FROM Btest_SQL Where OperationDate => 2011/09/05 +----------------------------------+ 出来るのあればどのようにすれば良いのが教えて頂けると幸いです。 よろしくお願い致します。

  • SQLについて

    SELECT テーブル名.A テーブル名.B FROM テーブル名 WHERE テーブル名.A = Y テーブル名.B = Z SELECT 別テーブル名.A 別テーブル名.B FROM 別テーブル という2つのSQLがあったとします。この時、別テーブルのSELECT文より取得してきた、AとBを上の式の条件(Y,Z)で両方同時に使用したい場合、どのようなSQLを書いたら良いのでしょうか? 1文にまとめて書く場合です。

  • これも「SQLの発行」している事になるのでしょうか

    accessの勉強をしていると、SQLの発行という言葉を良く見かけます。 しかし意味が良くわからないのでご教示いただきたいです。 -------------------------- SELECT テーブル1.* FROM テーブル1; -------------------------- 選択クエリとして、上記のSQL文を作り、保存し、 このクエリを開いただけでも 「SQLの発行」をした事になるのでしょうか? よろしくお願いいたします。

  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?

  • Access、SQLステートメントでの仮テーブルの作り方について

    AccessのSQLステートメントで仮テーブルを使ったSQLを作りたいのですが、構文の書き方がよくわかりません。 わからないなりに以下のようなSQL文を作ってみたのですが、 SELECT TBL.NO FROM [SELECT NO FROM ○○TBL WHERE △△="△△" GROUP BY NO HAVING (Mid(××,2,1)="K") ]. AS TBL; (本当はWHEREのあとにANDがたくさんあります) 実行すると、 「パラメータや別名が正しいこと、無効な文字や区切り記号が含まれていないこと、または名前が長すぎないことを確認してください。」 とメッセージが出ます。 仮テーブルに長いSELECT文をつかうことはできないのでしょうか? ちなみに環境はOS:Win2000+Access2000です。 どなたかアドバイスください。 よろしくお願いします。

  • MSDEのSQLについて

    DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

  • accessのSQL文で

    SELECT 科目Aテーブル.学生番号, 名簿テーブル.氏名, 科目Aテーブル.成績 INTO 科目Aテーブル2 FROM 名簿テーブル INNER JOIN 科目Aテーブル ON 名簿テーブル.学生番号 = 科目Aテーブル.学生番号; (これはテーブル作成クエリによるもの) と表示されたのですが SELECT ~ INTO ~ FROM ~ ON ~ ; のような構文はSQLにあるのでしょうか? ACCESS独自の拡張でしょうか? SELECT ~ INTO とSELECTにINTOがつく構文をインターネットで探したのですが見つかりません

  • Delphi SQL

    Delphi+InteBase 何がわからないのか、わかっていない状況です。 dbExpressのSQLConnection・SimpleDataSet、DataAccessのDataSource、DataControlsのDBGridを利用しています。 SimpleDataSetのDataset.CommandTextに「SELECT * FROM テーブル名」とかSQL文を書くことによって、希望のデータが表示されることまでは理解できました。 「SELECT MAX(ID) FROM テーブル名」など値を返す場合は、どのようにしたらよいのでしょうか? またCommandText:='DELETE FROM テーブル名'とすると、エラーにはなりますが、テーブルは空になっているのでtry文できりぬけています。 根本的にSQL文をどこに記述したらよいのかわかっていません。 どなたか、お助けを・・・

  • SQL '%@'とは?

    こんばんわ。 SQLの質問なのですが、 SELECT * FROM aテーブル WHERE aテーブル.番号 IN '%@' というSQL文が 学校で使われていましたが、 '%@'とは何を指すのでしょうか? 調べても分からなかったので ご教授願います。

印刷設定が使えない
このQ&Aのポイント
  • Windows10でDCP-J963Nを使用していますが、Windowsの標準印刷設定しか使えません。
  • ソフトをアンインストールし、ドライバーを再度ダウンロードしても、ダウンロードアイコンを押して待つとVISA-C1-.....を確認できませんと表示されます。
  • 無線で接続しているため、どのようにすれば印刷設定を使用できるでしょうか。
回答を見る

専門家に質問してみよう