2016-10-14 24 views
0

我的表是這樣的:SQLite的 - 更新表中的行數連續

CREATE TABLE Scan 
(Id Integer, 
Ordinal Integer) 

INSERT Scan VALUES(10, 1) 
INSERT Scan VALUES(20, 1) 
INSERT Scan VALUES(30, 8) 
INSERT Scan VALUES(40, 10) 

我想更新序號列,因此所有的數字變成連續的,像這樣(通過ID重複的序號順序的情況下) :

Id Ordinal 
10 1 
20 2 
30 3 
40 4 

SQLite中的普通SQL可能嗎?

+0

'update scan set ordinal = id' ??? –

+0

您應該閱讀標題爲「如何創建AUTOINCREMENT」字段的http://www.sqlite.org/faq.html#q1。 – ditkin

+0

Id字段是自動遞增。序數必須沒有「漏洞」。我僅以Id爲例來說明,如果由於某種原因我有重複的Ordinals - 它應該在更新期間按Id排序。當我填寫表格時 - 正確填入正確的人數。我想刪除記錄,然後重新設置整個表格,以便重新編號。我可以一個一個地做,它會工作(很少的記錄),但在SQL Server中它很容易,我認爲在SQLite中有一個技巧來做到這一點 – katit

回答

2

SQLite並沒有真正做到這一點的好方法。下面是一種效率不高的方法:

update scan 
    set ordinal = (select count(*) 
        from scan s2 
        where s2.ordinal < scan.ordinal or 
         s2.ordinal = scan.ordinal and s2.id <= scan.id 
       ); 
+0

運行這個錯誤:'near「s」:syntax error(代碼1):,編譯時:更新掃描的SET Ordinal =(SELECT COUNT(*)FROM Scan s2 WHERE s2.Ordinal katit

+0

你正在使用不同的語句,問題是你不能在sqllite的更新本身中使用別名,所以'update scan s'不被支持。刪除's'別名並使用@GordonLinoff提供的查詢 – albciff