我有一张桌子
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
我想更新表,使计数器列更新 (+1) 与之前的一样长parent = parent
。如果不,counter =1
so:
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
我有大约 350 万条记录。
我可以获得选择查询,但可以使其与更新一起使用。这就是我所拥有的:
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
您编写了一个优秀且聪明的查询来生成这些行号,该查询避免了使用会话变量的混乱解决方案。要进行更新,只需加入您的表即可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 上测试了这个查询,它似乎有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)