使用背景
在開發之初在設計問卷問題表(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)