我按表格形式在sqlite上按字母順序輸入單詞,它已被編號......假設我想在sylite經理的兩行之間添加一行,也許編號爲2 「aa」和3號是「ac」,如果我想在aa和ac之間添加「ab」,並使ab號碼3和ac號碼4,我該如何輕鬆地做到這一點?如何在sqlite管理器上的兩行之間插入另一行
0
A
回答
1
DBFiddle Demo of Update Statement
由於sqlite的不支持Windows的分析功能,這將是有點棘手,實現這一目標。您也可以使用類似的邏輯創建一個before insert
觸發器。
假設:
號碼與任何整數開始,像在這種情況下
2
並將於1
遞增。所以現有數據中沒有丟失序列。字母數字排序是適用其中
aa
<aaa
<ab
<ac
。這由RDBMS根據字符串中每個字符的ascii值完成,從第一個字符開始。您正在插入值
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 |
+------+-----+--------+
我使用cross join
因爲首先我們要確定的min_id
的difference
實際id
。與上述情況一樣,如果我們生成的號碼從1
到n
,您的ID以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. 如何通過在另外兩行之間插入一行來訂購mysql表
- 2. 如何在兩個表格行之間插入另一個表格行?
- 3. 在兩行之間插入行
- 4. sql - 插入兩行之間?
- 5. 如何在另一個文件之間插入幾行文字
- 6. 在表中的兩行之間插入一行
- 7. 在插入兩行中的一行時捕獲兩行之間的關係
- 8. 如何在Sql中的兩個現有行之間的表中插入一行
- 9. 如何在HSSF(Apache POI)的現有Excel中的兩行之間插入一行
- 10. 如何避免動態插入兩行之間的新行
- 11. 如何選擇在另一行之前插入的行,時間戳?
- 12. 如何在Android sqlite中的現有行之前插入新行?
- 13. 如何在sqlite插入觸發器之前進行驗證
- 14. 如何在兩個條件之間插入換行符條件
- 15. 插入兩個已知行之間的行在Matlab
- 16. 在SQL中插入兩行之間的行
- 17. 在tablerow之間插入一個新行
- 18. MySQL管理器 - 選擇插入空行
- 19. 如何在Winform c#ListView中的兩行之間插入行分隔符?
- 20. SQLite,刪除另一行後插入一行時出錯?
- 21. Oracle - 在兩次之間每小時插入一行
- 22. 如何在使用Python在SQLite中插入行之後檢索插入的id?
- 23. 如何在同一時間插入兩個arralist到SQLite?
- 24. 如何在sqlite中插入多行android
- 25. 在SQLite中插入唯一的行(python)
- 26. 如何在兩個sqlite-memory-database之間進行復制?
- 27. 按組插入行之間的行
- 28. 如何在每個SQLite行中插入一個唯一的ID?
- 29. AngularJS - 在兩個TR之間插入ng-repeat到另一個TR
- 30. 如何在SAS中插入一行相對於另一行