質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • SQL

    2323questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

SQLのCREATE VIEW文について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,497

Ritz_Malheur

score 6

よろしくお願いいたします。

『ゼロからはじめるデータベース操作 SQL』(翔泳社)を使ってSQLの勉強をしております。
そのなかで、CREATE VIEW文についてエラーが出てしまい、検索してもわからないため、質問させて頂きました。

SQL文は、
CREATE VIEW ShohinSum (shohin_bunrui, cnt_shohin) 
AS
SELECT shohin_bunrui, COUNT(*) FROM Shohin 
GROUP BY shohin_bunrui;
という文になります。

これを『A5M2』というSQLを実行するソフトを使って実行すると、
『[Microsoft][ODBC Microsoft Access Driver] PARAMETER句の構文エラーです。』
と出てしまいます。
Accessで同じ文を起動しても実行できませんでした。

また、ビュー名とビュー列名のスペースをなくすと、
実行できるようになります。
ShohinSum(shohin_bunrui,cnt_shohin) は実行 可能
ShohinSum (shohin_bunrui, cnt_shohin) はエラー

しかし、この後にビューを使う
SELECT shohin_bunrui, cnt_shohin
FROM ShohinSum;
を実行すると、
『[Microsoft][ODBC Microsoft Access Driver]入力テーブルまたはクエリ'ShohinSum'が見つかりませんでした。』
と出てしまいます。
恐らく、スペースの関係で、ビュー名がビュー列名とくっ付いてしまったのではないかと思います
(A5M2の画面左側にテーブルやビューの名前がでるところがあるのですが、ShohinSumだけ長くなってしまっているため)。


原因がわかる方がいらっしゃいましたら、教えて頂けると幸いです。
よろしくお願いいたします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

今後、質問するときはデータベースに何を使っているかと、
どうやって接続しているかも書いてくださいね。

エラーメッセージから判断するに Access の mdb か accdb に
ODBC で接続していると思われるので、それを想定して回答いたします。


なぜ思った通りに動かないか?
原因だけ言ってしまうと ODBC で接続しているためです。
ADO で接続すれば質問文に書かれているSQL文でちゃんと動きます。

私は A5M2 を初めて使いましたが、以下のようにすれば ADO で接続できるようです。
  1.  追加するデータベースの接続タイプを選択の画面で "ADO (OLE DB, ODBC)" を選択する。
  2.  接続文字列の右側のボタンをクリックする。
  3.  mdbファイルに接続するには "Microsoft Jet ?.? OLE DB Provider" を選択する。accdbファイルに接続するには "Microsoft Office ?.? Database Engine OLE DB Provider" を選択する。
  4.  データベース名(データソース)には mdbファイル(accdbファイル)のパスを記入する。


 ODBCで接続したときに何が起こっていたか?
また、ビュー名とビュー列名のスペースをなくすと、 
実行できるようになります。 
ShohinSum(shohin_bunrui,cnt_shohin) は実行 可能 
ShohinSum (shohin_bunrui, cnt_shohin) はエラー  

恐らく、スペースの関係で、ビュー名がビュー列名とくっ付いてしまったのではないかと思います

ご想像の通りビュー名とビュー列名がくっついて、全体がビュー名となっているため、
実行できたときは ShohinSum ではなく ShohinSum(shohin_bunrui,cnt_shohin) という名前の
ビュー(Access的に言えばクエリー)が生成されています。

そんな名前のビューを SELECT するときは以下のようなSQL文になります。
SELECT * FROM [ShohinSum(shohin_bunrui,cnt_shohin)];
ビュー名に括弧とかカンマのような特殊な文字を使用しているため、
名前を [] で囲む必要があります。
そして生成したビューをODBC接続で削除したいときは
DROP VIEW [ShohinSum(shohin_bunrui,cnt_shohin)];
ではなく
DROP TABLE [ShohinSum(shohin_bunrui,cnt_shohin)];
になります。


 ODBC接続では出来ないのか?
以下のように SELECT の段階で列に名前を付ければODBC接続でも出来ます。
CREATE VIEW ShohinSum AS
SELECT shohin_bunrui, COUNT(*) AS cnt_shohin FROM Shohin
GROUP BY shohin_bunrui;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/07 23:10

    ご丁寧にありがとうございました!教えて頂いた通りに実行させて頂き、
    無事にできるようになりました。
    質問についてあいまいだった点が多く、申し訳ありませんでした。以後気を付けます。

    キャンセル

0

正しいSQLは以下のようではないでしょうか?
CREATE VIEW ShohinSum  
AS 
SELECT shohin_bunrui, COUNT(*) AS cnt_shohin FROM Shohin  
GROUP BY shohin_bunrui; 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/07 23:12

    ありがとうございます!
    書いて頂いたSQL文で実行できました!
    ありがとうございました。

    キャンセル

0

CREATE VIEW に引数は不要です。

CREATE VIEW ShohinSum (shohin_bunrui, cnt_shohin) 
から
CREATE VIEW ShohinSum
に変更するといいと思います。

仮に、引数を渡して何かしらの処理をさせたいのならストアドプロシージャがおすすめです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/07 23:11

    ありがとうございました!
    CREATE VIEWに引数が不要だということを初めて知り、勉強になりました。
    オススメも教えて頂き、ありがとうございます。使ってみます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    oracle SQL

    表のデータに「あ」から「ん」までの50音を使って 重複無くデータの更新をしたいです。 あ100 あ102 い102 あ103 あ104 い104 う104 え104 見たいな感じで

  • 解決済

    union句をサブクエリに含むクエリ

    union句をサブクエリに含むクエリはどんな場合に使われますか?また、union句が使えない場合とはどんなときですか。例などを交えて説明いただけると幸いです。

  • 解決済

    オンプレSQLServerからAmazonRDSへのリンクサーバを設定したい

    前提・実現したいこと オンプレミスのSQLServer 2008環境を前提に、Amazon RDS(MySQL or PostgreSQL)とリンクサーバを実現したいと思います。

  • 解決済

    Cloud SQLでデータを正しくインポートできない

    前提・実現したいこと GCP(Compute Engine + SQL)でウェブサイトを構築しています。 既存のSQLインスタンスのデータをエクスポートし、新しく作成したSQL

  • 解決済

    pythonからMSACCESSに接続したい

    python(jupyer)からMSACCESSに接続し、 pandasに取り込みたいのですがエラーとなります。 環境 OS: Windows 7  64-bit Pyth

  • 解決済

    AccessからDBへの認証情報の保存について

    前提・実現したいこと 現在、AccessでDBのメンテナンスを行うツールを作成しており、 権限周りの設定で、質問があります。 以下の様に利用するのを理想としています。 ・専

  • 解決済

    Windows server上にあるPHPのWebアプリからあいまい検索ができない

    データベースにある製品情報をWEBブラウザで閲覧するアプリをPHPで作成しております。 製品の名前を検索できるページがあるのですが、 ローカルの開発環境では問題なくSQLのLIKE

  • 解決済

    PosgreSQL VIEW文について

    下記、VIEWが実行できないのですが、何が悪いのでしょうか。 お分かりになる方、教えていただけますか。 エラー内容 ” SQL   : 列"hanbai_tanka"が複数指定

同じタグがついた質問を見る

  • SQL

    2323questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。