使用背景
在开发之初在设计问卷问题表(question)时考虑到题号的没有保存价值未对题号进行保存,在之后的需求调整后,又有了对问卷问题表(question)添加题号(number)字段的需求,故写了以下语句对问卷问题表(question)旧数据题号(number)字段进行统一更新。
UPDATE question q
SET q.number = (SELECT a.rank
FROM
(
SELECT
q1.id,-- 问题编号
q1.sort, -- 问题排序
q1.paper_id, -- 关联问卷编号
-- 当上一条数据关联问卷编号与当前一致时题号@rank加1,否则题号@rank重新从1开始计数
CASE
WHEN q1.paper_id = @paper_id THEN
@rank := @rank + 1 ELSE @rank := 1
END AS rank,
-- 将当前数据的关联问卷编号赋值给@paper_id
@paper_id := q1.paper_id
FROM
question q1,
( SELECT @paper_id := '', @rank := 0 ) t
ORDER BY
q1.paper_id,
q1.sort
) a WHERE q.ID = a.ID)