mysql基于先前记录的增量值

时间:2017-08-10 14:07:04

标签: mysql increment record

我有一张桌子

Id|Parent|Counter
--|------|-------
 1| A    | NULL
 2| A    | NULL 
 3| A    | NULL
 4| B    | NULL
 5| B    | NULL
 6| C    | NULL
 7| D    | NULL
 8| D    | NULL

我希望更新表格,使得计数器列与先前的parent = parent一样更新(+1)。如果没有,counter =1所以:

Id|Parent|Counter
--|------|-------
 1| A    | 1
 2| A    | 2
 3| A    | 3
 4| B    | 1
 5| B    | 2
 6| C    | 1
 7| D    | 1
 8| D    | 2

我有大约3.5M的记录。

我可以获得一个选择查询,但可以让它与更新一起使用。这就是我所拥有的:

SELECT  t.Parent, (
  SELECT COUNT( * ) 
  FROM bomitems AS x
  WHERE x.id <= t.id
  AND x.Parent = t.Parent
  ) AS Counter
FROM bomitems AS t

1 个答案:

答案 0 :(得分:1)

你写了一个好的,聪明的查询来生成那些行号,避免使用会话变量的混乱解决方案。要进行更新,只需将表bomitems加入此查询:

UPDATE bomitems t1
INNER JOIN
(
    SELECT
    t.ID,
    t.Parent,
    (SELECT COUNT(*) FROM bomitems AS x WHERE x.id <= t.id AND x.Parent = t.Parent) AS Counter
    FROM bomitems t
) t2
    ON t1.ID = t2.ID
SET t1.Counter = t2.Counter;

我在我的本地MySQL Workbench上测试了这个查询,它似乎正在运行。