2011-10-21 11 views
1

私はおそらくここで愚かな初心者間違いをしていますが、SQLは私の強みの一つではありません。基本SELECTがエントリを見つけることができません

私は単純なSQLite DB(SQLite Managerで)を修正しようとしていますが、なぜこのselect文を返すことができないのか分かりません。

SELECT * 
FROM facts 
WHERE id = -9215979828305747000 

エラーがスローされ、テーブルの最初のエントリに関係なく何も返されません。私も試しました

SELECT * 
FROM facts 
WHERE CAST(facts.id AS INTEGER) = CAST('-9215979828305747000' AS INTEGER) 

もう一度何もしません。

ブラウズウィンドウに値が表示されていますが、特定の検索で値を取得できません。価値の長さのために起こっていますか?

+0

は、いくつかの一時テーブル内のデータを取得してください? IDフィールドのデータ型は何ですか? –

+0

'select min(id)from facts'を実行するとどんな結果が得られますか? –

+0

IDは、CREATE TABLEに従ってInteger型です。 min(id)は "-9215979828305747000"を返します – Jeremy

答えて

0

私はこのテストをした:

CREATE TABLE "test" (
    "id" INTEGER PRIMARY KEY NOT NULL, 
    "name" TEXT 
) 

insert into test values (1, "tttt") 
insert into test values (-9215979828305747000, "OO") 


select name from test where id = -9215979828305747000' 

> "OO" 

は、だから、新鮮な新しいテーブルで動作しているようです。問題は明らかにSQLの選択、キーまたはテーブルの定義にはありません。あなたはIDのこの負の値を持つすべてのレコードを持っています

insert into table_copy values (select * from facts) 
+0

私は、データベース内のテンポラリテーブルを作成し、それをfactsテーブルから必要な値で埋めると、まだSELECTステートメントを実行できませんでした。しかし、手動で試してみたら、うまくいきました。だから違うものを試しました。動的に変化するデータを保持するためのテーブルに「変数」エントリを作成し、min(id)を使用して値を入力しました。私はそれから、 'select * from fact = id =(deckVarsからの値の選択= key = 'temp')'とSUCCESSというSELECTを使って参照しました。私はなぜこれが機能するのか分からないが、他の人はそうではない。まだどこかに問題をキャストしている必要があります。 – Jeremy

+0

問題が表示されます。 'UPDATE deckVars SET temp =(テストからmin(id)を選択する)key = 'temp''は、SQLite Managerで確認した値とは異なる数値で入力します。また、 'select min(id)from test'では、Managerに表示されている値を返しますが、Updateで取得した値は返しません。その値は、私が一時的な値を使用するときに実際に動作するUpdateを実行するときに得られる値です。ここで何が起こっているのか分かりません。 – Jeremy

+0

私はあなたをさらに助ける方法がわかりません。私はテーブルを作成するときにSQLiteの2つの異なるINT:プライマリキーとINTとしてINTを気付きました。両者に違いはありますか? – Louis

1

-9215979828305747000はInt32(2147483647)の最大値よりも大きいので、facts.idは整数ではないと思います。それに応じてデータ型とキャストをチェックしてください。

おそらく文字列ですか?

SELECT * 
FROM facts 
WHERE id = '-9215979828305747000' 
+0

それは挑戦的に整数ではなく、少なくともテーブルがどのように作成されたかです。 'CREATE TABLEの事実( \tのid INTEGER NOT NULLと、 \t "modelId" INTEGER NOT NULLと、 \t作成FLOAT NULL NOT、 \t修正FLOAT、NOT NULL、 \tタグTEXT NOT NULLと、 \t "spaceUntil" テキストではありませんしかし、そのが最大値よりも大きく、それはおそらく説明している場合:NULL、 \tはINTEGER、 \t PRIMARY KEY(ID)、 \t FOREIGN KEY( "modelIdは")モデル(ID) ) ' 編集を参照している "lastCardId"なぜ私はcaそれを整数または文字列として取得しないでください。うーん。 – Jeremy

+0

逆にキャストしようとするとどうなりますか?文字列としてIDをキャストし、文字列 '-9215979828305747000'と比較します。 Intでこのような大きな(または小さな)番号を取得できる理由がわかりません。 – Tejo

+0

私はそれを文字列として受け取ることはできません: 'SELECT * FROM facts WHERE CAST(facts.id AS STRING)= CAST( '#' AS STRING)'。その大量はBIGINTの権利に収まるだろうか?あなたがSQLiteが1バイトから8バイトの整数型に入れたものを実用的に保持していることを誰かが指摘しているところでは、ある種のグーグル・グーグルが別の質問を示しています。私はすでにBIGINTとしてキャストしようとしましたが、運はありません。 – Jeremy

関連する問題