2011-06-29 6 views
2

私は約100の行を持つsqliteデータベースを持っています。私がやろうとしているのは奇妙なことですが、既存の各行の間に新しい行を挿入する必要があります。既存のテーブルの他のすべての行に新しいテーブル行を挿入するにはどうすればよいですか?

私は次のようにInsert文を使用しようとしているが、任意の運を持っていなかった

insert into t1(column1) values("hello") where id%2 == 0 

だから私は基本的にIDがあるなら、私に教えて%の演算子はを使用しようとしています偶数または奇数。すべての偶数ID番号については、新しい行を挿入したいと思います。

私には何が欠けていますか?私はどうしたら違うことができますか?他のすべての行に新しい行を挿入してインデックスを更新するにはどうすればよいですか?データベースに事前に注文したとして

おかげ

答えて

2

あなたの質問は、行に何らかの組み込み順があることと、他の行の間に行を挿入できることを前提としています。それは真実ではない。

ローはディスク上に順序があり、通常はid列が順番に割り当てられますが、これは実装の詳細です。問合せを実行すると、ORDER BY句を使用して指定する場合を除いて、データベースは任意の順序で行を返すことができます。

今、あなたが実際に望むのは、既存の行と行の間に行を挿入することです(id)。あなたが欲しいものを得るための一つの方法は、次のようになります。

UPDATE t1 SET id = id * 2 
INSERT INTO t1 (id, column) SELECT id+1, "hello" FROM t1 

UPDATEは、すべての既存の行のIDを倍増する(その1,2,3は2,4,6となります)。 INSERTはt1に対してクエリを実行し、結果を使用してidの値が既存の行よりも1つ多い新しい行のセットを挿入します(2,4,6が3,5,7になります)。

私は上記のステートメントをテストしていないので、動作するかどうかわからないか、一時テーブルのような特別なトリッキーが必要な場合は、同じテーブルを1つのステートメントで照会して更新します。また、私は構文エラーを作成している可能性があります。

+0

私は洞察に感謝します!私が求めていることは珍しいことを知っています。あなたが私に仕事の解決策を与えることができてうれしいです。 –

+0

+1は私よりも優れています – MPelletier

0

は、行を考慮しないでください。データベースは、それらが来るときに、またはインデックスに従って格納する。必要に応じて検索時(データのクエリ時)に注文するのはあなたの仕事です。

関連する問題