2016-10-14 25 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