2016-08-23 1 views
0

これをかなりグーグルで調べて、類似しているが異なる質問をしている回答を見つけましたが、私がやりたいことはありません。SQLiteを使用してテーブルに行番号を追加するための、簡単で計算上安価な方法は?

テーブルがあり、行番号を追加したいと思います。だから、:

ID || value 
91 || valueA 
11 || valueB 
71 || valueC 

Row# || ID || value 
1 || 91 || valueA 
2 || 11 || valueB 
3 || 71 || valueC 

なり、もう少し複雑な私のユースケースよりもthis answerを発見しました。また、彼らは計算上高価(n^2-ish)で答えを使うことに対して警告されました。

this oneのように、ユーザーがクエリで返された行番号を希望していたが、これは別の使用例です。テーブルのすべての行に行番号を追加したいだけです。

+1

テーブルに別の列を追加しますか?もしそうなら、CREATE TABLEステートメントに別の行を含めてください。 – Michael

+1

私の答えにコメントしてください。これがあなたが求めていたものを解決するのに役立つかどうかを知りたいと思います。 – Michael

答えて

2

質問に基づいて、データベースの別の列を要求していたようです。そうでない場合はコメントしてください。 1で

CREATE TABLE table_name(
    RowNum INTEGER AUTOINCREMENT, 
    _ID INTEGER PRIMARY KEY, 
    value TEXT, 
); 

インクリメントデータベースのバージョンと、行ってもいいでしょう:あなたのデータベース作成クラス(またはどこでもあなたのデータベースを作成する)、CREATE TABLE声明の中で、次のような構造を使用して

+0

エラーが発生します。 '" AUTOINCREMENT "の近くのSQL構文エラー –

2

私が知っていると思うように、SQLテーブルには本質的な順序はありません。したがって、「行番号」は暗黙の順序に基づいています。 DBMSで「行ID」を使用すると、暗黙の順序が挿入順序になる可能性があります。それはあなたのニーズに合っていれば安いです、それはあなたが望むものです。

作成する他の「行番号」にはソートが必要です。索引でサポートされている場合、そのソートはO(NログN)、それ以外の場合はO(N^2)になります。数学はそのことを非常に強く擁護する方法を持っています。

この疑問に何度も答えると、私はsimple exampleと書いた。 SQLiteでは、100万行以下の経験がありました。より大きな種類は、YMMVの方が長くかかります。

FWIW、私は決して派生した注文を保存しません。システムがその正確さを実行可能にすることができないので、それが正しいかどうかを知ることは不可能です。面白い順序でカバー索引を保持し、必要に応じてランク順を提供するビューに頼る方がよい。

+0

ルーキーqですが、あなたの例を見て、いくつかの方法を試しても、私はまだそれを動作させることができません。私の質問は、増加する行番号を生成する要素です。 SQLiteでSIDを使用するにはどうしたらいいですか?グーグルでは何も見つかりませんでしたし、SID関連のことは何も私のコードではありません。 –

関連する問題