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

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

新規登録して質問してみよう
ただいま回答率
85.50%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

2回答

5115閲覧

SQLiteでの「SELECT文」の実行について

nakaojin

総合スコア13

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2017/05/31 02:18

DB Browser for SQLiteの初心者です。

1 10行程度の簡単なデータベースを作成し、「SELECT文」を実行しています。

2 その結果、「SELECT * FROM shouhin;」と打ち込んで、作成済みの10行のデータが表示され、下段にも「10 rows returned in 1ms from: SELECT * FROM shouhin;」)との表示がでるところまでは成功しました。

3 次の段階として、「列を指定」した表示をするために、「SELECT date, iten_name FROM shouhin WHERE shop='ツルハドラッグ';」と、打ち込むと次のような表示が出ました。

no such column: iten_name: SELECT date, iten_name FROM shouhin WHERE shop='ツルハドラッグ';

4 そのために各カラム別にSQL文を実行した結果、「iten_name」と「shop」の2つに「no such column」の表示が出ました。

5 「Edit table destinition」欄の「CREATE TABLE」は次のような設定になっています。

CREATE TABLE shouhin (
id INTEGER,
date INTEGER,
shop VARCHAR(50),
item_ name VARCHAR(100),
quantity INTEGER,
price INTEGER,
total INTEGER,
goods price INTEGER,
fee INTEGER,
cod fee INTEGER,
total pay INTEGER,
remarks TEXT,
PRIMARY KEY(id)
);

6 「shop」と「item_ name 」欄の文字数は20字程度で2バイトで計算しても制限範囲内の文字数です。

7 現在の私の知識では、これらのカラムで問題は字数以外に考えられないのですが、どこに問題があるのでしょうか。問題箇所の指摘と、解決方法を教えていただきたく、よろしくお願いいたします。

なお、パソコン環境は次のとおりです。

Windons 10 Pro 64 bit
DB Browser for SQLite Ver. 3.9.1

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoorwm

2017/05/31 02:26

ただのタイポかと思うのですが、本当にiten_nameとカラムを指定したのでしょうか?
guest

回答2

0

エラーメッセージを良く読んでください。

no such column: iten_name

スペルミスです。

SELECT date, item_name FROM shouhin WHERE shop='ツルハドラッグ';

投稿2017/05/31 02:30

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakaojin

2017/05/31 21:02

早速のご指摘有難うございます。  質問をする際には、このようなタイプミスがでないように、実行した際のコピーを使ったつもりでしたがどうした手違いか投稿した文章はミスっていたようで、誠にスミマセン。 本日、念のために実行しましたが結果は次のとおり不成功でした。 どうか、よろしくお願い致します。 SELECT date, item_name FROM shouhin WHERE shop='ツルハドラッグ'; no such column: item_name: SELECT date, item_name FROM shouhin WHERE shop='ツルハドラッグ'; SELECT item_name FROM shouhin; no such column: item_name: SELECT item_name FROM shouhin; SELECT shop FROM shouhin; no such column: shop: SELECT shop FROM shouhin; SELECT date FROM shouhin; not an error:
ttyp03

2017/06/01 00:00

ん~、エラーメッセージを読む限りでは「そのカラムがない」と言っているので、本当にその名前でテーブルが作成されているか、以下のSQLで確認してみてください。 select sql from sqlite_master where type='table' and name='shouhin'; また、私はSQLiteの実行環境がないのですが、コンソール(?)からは以下のコマンドでも確認できるようです。 .schema shouhin
nakaojin

2017/06/03 05:29

ttyp03 さん こんにちは。   ご返事が遅くなって申し訳ありません。 アプリについて、ほとんど理解はしてない状態でなんとか操作をしていますので何かと時間がかかっています。 ご指示いただいた次のSQL文を実行した結果は次のとおりでした。 select sql from sqlite_master where type='table' and name='shouhin'; 1      sql CREATE TABLE “shouhin”( 'id'... 2 1 rows returned in 0ms from: select sql from sqlite_master where type='table' and name='shouhin'; 3 CREATE TABLE "shouhin" ( `id` INTEGER, `date` INTEGER, `shop ` VARCHAR(50), `item_ name ` VARCHAR(100), `quantity` INTEGER, `price ` INTEGER, `total ` INTEGER, `goods price` INTEGER, `fee` INTEGER, `cod fee` INTEGER, `total pay` INTEGER, `remarks` TEXT, PRIMARY KEY(`id`) ) 4 PRAGMA foreign_keys = "0"; PRAGMA encoding SELECT type,name,sql,tbl_name FROM sqlite_master UNION SELECT type,name,sql,tbl_name FROM sqlite_temp_master; SELECT type,name,sql,tbl_name FROM sqlite_master UNION SELECT type,name,sql,tbl_name FROM sqlite_temp_master; SELECT COUNT(*) FROM (SELECT `_rowid_`,* FROM `shouhin` ORDER BY `_rowid_` ASC); SELECT `_rowid_`,* FROM `shouhin` ORDER BY `_rowid_` ASC LIMIT 0, 50000; SELECT COUNT(*) FROM (select sql from sqlite_master where type='table' and name='shouhin'); select sql from sqlite_master where type='table' and name='shouhin' LIMIT 0, 50000; 私には、チンプンカンプンですが、SQL文を実行した際に表示された画面を全て表示してあります。最初の質問にも記載いたしましたが、作成した全部のデータのSQL文の実行は問題なくできています。よろしくお願い致します。
ttyp03

2017/06/03 08:58

3番目のcreate文を見るとわかるかと思いますが、shopやitem_ nameなど、カラム名に空白が入ってるものが多々あります。 この名前が正しいのであれば、`shop `とバッククォートで囲んで指定してください。 select `shop ` from shouhin; そもそもこの名前自体が誤りであるのなら一旦テーブルを削除して、作り直したほうがよろしいかと思います。
nakaojin

2017/06/05 20:19

ご返事が遅くなって申し訳ありません。  理由はわかりませんが、このメールに限って着信の通知がなく、「PineMatsu」の投稿を見て気がついた次第です。  1 ご指摘のとおり、新たにテーブルを作り直しました。そこでは、カラ ム名には空白をなくしてアンダーバー( _ )で結びました。  2 その際に、「store」 を 「shoutenmei」に変更しました。  3 その結果、次のような形でSQL文を実行すると、意図した通りのデー タが帰って来ました。  SELECT * FROM shouhinKOUNYUU WHERE shoutenmei='XXXX';   今回は、度々お世話になり誠に有難うございました。
nakaojin

2017/06/09 02:29

ベストアンサーの選定について   このメールでのベストアンサーの選定ができないためにサポートセンターに照会しましたところ、この回答欄につけるようにと返事をいただきましたので、この場所に記載いたしました。 これで、この質問は終了にさせていただきます。
guest

0

item_nameに関してはttyp03さんの回答の通り空白が入っていることが原因のような気がします。
なお、SELECT文で指定する場合は、

SQL

1SELECT date, "iten_name " FROM shouhin WHERE shop='YYYYY'; 2SELECT * FROM shouhin WHERE "item_name "='XXXXX';

というようにカラム名はダブルクオーテーション("")で囲わないとうまく判断されません。
まあ、カラム名の最後に空白を入れることは普通しないので、スキーマの見直しをやられたほうが良いと思います。

それと、SQLiteのCREATE文ですが、VARCHAR型というのはSQLiteには無く、型として「CHAR」「CLOB」「TEXT」のいずれかの文字を含む場合は「TEXT」型と判断されます。なのでVARCHAR(100)と書いても「TEXT」となるために文字数制限は掛かりません。(100文字以上格納できてしまう)

SQLiteの型はかなり緩くて、実は型を書かなくてもテーブルの生成ができます。数値であろうが文字列であろうがなんでも格納できてしまいます。(まあ、取り出す時に数値と見るか文字列と見るかで処理が変わってきてしまいますが)

投稿2017/06/05 08:31

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakaojin

2017/06/05 20:22

ご指摘のとおりにカラム名を変更した結果、成功いたしました。 CREATE文の文字数の件は、大変勉強になりました。 ただ、現在のところ支障がないようなので、これを変更してまた何か問題が生ずることが心配ですので当分の間はそのままにしておきたいと思います。     ご回答、どうも有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問