以下查询将遍历我的表,并将数值附加到我的一个列中。对于每一行,此数值将增加1,因此会产生jsmith, jsmith1, jsmith2, jsmith3
之类的值。目前我必须使用诸如Where external_id = 'jsmith'
之类的where子句来使用external_id jsmith更新所有人,但是我想避免将其放在哪里,因为可能有多个外部id,所以简而言之,当我运行这个时更新,我希望它产生类似jsmith, jsmith1, jsmith2, brobert, brobert1, brobert2, pmorris, pmorris1, pmorris2, pmorris3
:
UPDATE ( SELECT t.id
, t.external_id
, CONCAT(t.external_id,case s.seq when 0 then '' else s.seq end) AS new_external_id
FROM ( SELECT @i := @i + 1 AS seq
, m.id
FROM Header m
JOIN (SELECT @i := -2) i
ORDER BY m.id
) s
JOIN Header t
ON t.id = s.id
WHERE t.external_id = 'jsmith' -- Exclude this
ORDER BY t.id
) r
JOIN Header u
ON u.id = r.id
SET u.external_id = r.new_external_id;