SQlite更新增量计数器

时间:2016-01-01 07:19:54

标签: sqlite sql-update

我有下表:

Group | SubGroup | id  
'A'   | 'AA'     |  2  
'A'   | 'AB'     |  4  
'A'   | 'AC'     |  6    
'B'   | 'BA'     |  2  
'B'   | 'BB'     |  9  

我想更新id列以使每个组具有顺序值:

Group | SubGroup | id  
'A'   | 'AA'     |  1  
'A'   | 'AB'     |  2  
'A'   | 'AC'     |  3  
'B'   | 'BA'     |  1  
'B'   | 'BB'     |  2  

我使用了一个查询来询问价值但得到了它但不知道如何进行更新。

CREATE TABLE temp_tbl (groupa TEXT, subgroup TEXT, num INTEGER);  
INSERT INTO temp_tbl(groupa,subgroup,num) VALUES ('A','AA',2);   
INSERT INTO temp_tbl(groupa,subgroup,num) VALUES ('A','AB',4);  
INSERT INTO temp_tbl(groupa,subgroup,num) VALUES ('A','AC',6);  
INSERT INTO temp_tbl(groupa,subgroup,num) VALUES ('B','BA',2);  
INSERT INTO temp_tbl(groupa,subgroup,num) VALUES ('B','BB',9); 

查询:

SELECT t9.groupa,t9.subgroup, ( SELECT COUNT(*) FROM temp_tbl as t8  
WHERE t8.groupa=t9.groupa AND t8.num<=t9.num ) cnt FROM temp_tbl as t9


'A'   | 'AA'     |  1  
'A'   | 'AB'     |  2  
'A'   | 'AC'     |  3  
'B'   | 'BA'     |  1  
'B'   | 'BB'     |  2 

现在我想相应地更新字段。我怎么能这样做?

由于

1 个答案:

答案 0 :(得分:2)

您可以将相关子查询与UPDATE一起使用。

UPDATE temp_tbl 
SET num = (SELECT COUNT(*) 
           FROM temp_tbl as t8  
           WHERE t8.groupa=temp_tbl.groupa 
             AND t8.num<=temp_tbl.num );

SqlFiddleDemo

输出:

╔═════════╦═══════════╦═════╗
║ groupa  ║ subgroup  ║ num ║
╠═════════╬═══════════╬═════╣
║ A       ║ AA        ║   1 ║
║ A       ║ AB        ║   2 ║
║ A       ║ AC        ║   3 ║
║ B       ║ BA        ║   1 ║
║ B       ║ BB        ║   2 ║
╚═════════╩═══════════╩═════╝

请注意,如果id在子组中不唯一,则生成nums的代码将失败。

SqlFiddleDemo2