sqliteのアルファベット順に表形式の単語を入力していますが、番号が付けられています... aaとacの間にabを入れてab番号3とac番号4にしたいのであれば、 "aa"とnumber 3は "ac"です。どうすれば簡単にできますか? sqliteのようsqliteのマネージャで2行の間に別の行を挿入する方法
0
A
答えて
1
DBFiddle Demo of Update Statement
窓の分析機能をサポートしていない、これを達成するために少しトリッキーになります。同様のロジックを使用してbefore insert
トリガーを作成することもできます。
仮定:
Numberこの場合
2
のように、任意の整数で始まり、1
によって増加します。したがって、既存のデータに欠落したシーケンスはありません。ここaa
<aaa
<ab
<ac
英数字ソートが適用可能です。これは、文字列の各文字のascii値に基づいて、最初の文字から始まるRDBMSによって行われます。
値
ab
は、id
なしで挿入しています。下の更新ステートメントの実行後、id
はこのval
に割り当てられます。同様のロジックを使用して、before insert
トリガーで同じことを達成できます。
new_id
を最初に問い合わせてください。
select t.*,
(select count(*) from test t1 where t.val>=t1.val) +
o.diff as new_id
from test t
cross join
(select * from
(select t.*,(select count(*) from test t1 where t.val>=t1.val) as rn ,
id - (select count(*) from test t1 where t.val>=t1.val) as diff
from test t
) where rn=1
) o
出力
+------+-----+--------+
| id | val | new_id |
+------+-----+--------+
| 2 | aa | 2 |
| 3 | ac | 4 |
| null | ab | 3 |
+------+-----+--------+
私たちは実際のid
でmin_id
のdifference
を決定する必要が最初のように私はcross join
を使用しています。上記の場合と同様に、1
からn
までの数字を生成すると、あなたのIDは2
で始まります。したがって、これら2つのdiff
は1
です。これは、生成されたIDをすべて追加して、new_id
になります。もっと簡単なアプローチがあるかもしれませんが、これは私が今考えることのできるすべてです。
ここでは、更新ステートメントでこのクエリを使用してid
をnew_id
に更新します。
update test
set id = (select tb.new_id from
(select t.*,
(select count(*) from test t1 where t.val>=t1.val) +
o.diff as new_id
from test t
cross join
(select * from
(select t.*,(select count(*) from test t1 where t.val>=t1.val) as rn ,
id - (select count(*) from test t1 where t.val>=t1.val) as diff
from test t
) where rn=1
) o
) tb
where test.val=tb.val
)
where exists
(select * From (select t.*,
(select count(*) from test t1 where t.val>=t1.val) +
o.diff as new_id
from test t
cross join
(select * from
(select t.*,(select count(*) from test t1 where t.val>=t1.val) as rn ,
id - (select count(*) from test t1 where t.val>=t1.val) as diff
from test t
) where rn=1
) o
) tb
where test.val=tb.val
);
関連する問題
- 1. 2行の間に行を挿入する
- 2. Sqlite独自の行を挿入する
- 3. SQL内の2つの行の間に行を挿入
- 4. 2つの条件の間に改行を挿入する方法
- 5. データ間に複数の行を挿入する方法
- 6. 先行ゼロを長時間保持します。SQLiteの挿入
- 7. Sqlの2つの既存の行の間にテーブルの行を挿入する方法
- 8. Sqlite - 行を選択し、挿入して使用する方法
- 9. 別の行の前に特定の行を挿入する方法、Pythonを使ったテキストファイルに行を挿入する方法はありませんか?
- 10. xamarinのフォームで2つの日付間でSQLiteクエリを実行する方法
- 11. テーブルの行を別のデータベースに挿入
- 12. 別の行削除アニメーションの後に行を挿入する
- 13. Android sqlite行の削除と挿入
- 14. ラーベル登録:2つの行を別々の表に挿入
- 15. データの各行の間に行を挿入する一般式
- 16. SQLiteは、実際の値を挿入している間に1行にnullを挿入します
- 17. 2つのフラグメントの間にプログレスバーを挿入する方法
- 18. リストアイテム間に改行を挿入する方法
- 19. SQliteの別のテーブルに挿入
- 20. グリッドビューに行を挿入する方法
- 21. PDO SQLiteの挿入をトランザクションなしで行う方法はありますか?
- 22. リストをmybatisに挿入し、INSERTをデータベースの別々の行に挿入する方法はありますか?
- 23. 同じ行の別の列に現在のuser_idを挿入する方法
- 24. SQLiteデータベースに挿入された最後の2行だけを取得する方法はありますか?
- 25. SQLiteのみでユニークな行を挿入する
- 26. SQLiteデータベースに行を挿入する際の問題
- 27. (Android)sqliteに何千もの行を挿入する
- 28. SQLiteデータベースに挿入された行の数が負である
- 29. SQliteの挿入は常に同じインデックスで行われます
- 30. SQLite、erro、別の行を削除した後に行を挿入するとどうなりますか?