Mysql
唯一鍵列的增量值
我有一張桌子:
CREATE TABLE tbl ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, rank BIGINT(20) UNSIGNED NOT NULL, PRIMARY KEY (id), UNIQUE KEY rank (rank) )
有一些價值觀:
(2, 11) (1, 12) (9, 42) (4711, 43) (9000, 44)
即隊伍可能有差距。排名始終 >= 1。
我想從第三個最小值開始將每個等級增加一:
UPDATE tbl table_1 JOIN ( SELECT table_2.id FROM tbl table_2 ORDER BY table_2.rank ASC LIMIT 2, 18446744073709551615 ) sub_1 ON table_1.id = sub_1.id SET table_1.rank = table_1.rank + 1
問題:
#1062 - 鍵 ‘rank’ 的重複條目 ‘43’
我試過的:
- 添加
ORDER BY
:UPDATE tbl table_1 JOIN ( SELECT table_2.id FROM tbl table_2 ORDER BY table_2.rank ASC LIMIT 2, 18446744073709551615 ) sub_1 ON table_1.id = sub_1.id SET table_1.rank = table_1.rank + 1 ORDER BY table_1.rank DESC
#1221 - UPDATE 和 ORDER BY 的錯誤使用
- 消除連接:
UPDATE tbl SET rank = rank + 1 WHERE rank >= ( SELECT table_2.rank FROM tbl table_2 ORDER BY table_2.rank ASC LIMIT 2, 1 ) ORDER BY rank DESC
#1093 - 表 ’tbl’ 被指定了兩次,既作為 ‘UPDATE’ 的目標,又作為數據的單獨源
我能想到的唯一選擇是要麼省略
UNIQUE KEY
,要麼將語句分成兩部分:獲得第 3 最低的排名,然後執行UPDATE … ORDER BY …
。我的問題有什麼合適的解決方案嗎?
伺服器:MariaDB 10.2.15
InnoDB:5.7.22
我認為您可以執行更新您需要使用 2 個語句。
- 按降序更新所有記錄。單表 UPDATE 允許排序。
UPDATE tbl SET rank=rank+1 ORDER BY rank DESC;
- 恢復前 2 條記錄的值。
UPDATE tbl SET rank=rank-1 ORDER BY rank ASC LIMIT 2;