我有下表:
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
现在我想相应地更新字段。我怎么能这样做?
由于
答案 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
强>