MySQL更新唯一列的值

  • 本文关键字:唯一 更新 MySQL mysql
  • 更新时间 :
  • 英文 :


我正在尝试:

  1. 从符合某些条件的唯一列中选择值,例如,可以被2整除的数字
  2. 更改这些数字
  3. 将结果写回表中。如果修改后的数字与已经存在的数字重复,则跳过此行插入

创建表:

CREATE TABLE test (
id INT AUTO_INCREMENT PRIMARY KEY,
number INT NOT NULL UNIQUE
)

填充:

INSERT test(number)
VALUES
(4), (5), (6), (9)

:

UPDATE test
SET number = number - 1
WHERE MOD(number, 2) > 0

(此代码失败,因为键'test.number'重复条目'4')

我想以下面的表格结束:

id    number
1       4
3       6
4       8

我希望编号为2的编号5更改为4 (number = number-1),然后被拒绝,因为它重复编号为1的编号4

我也试过以下方法:

INSERT INTO test
(id, number)
SELECT id, (number-1) AS number 
FROM test
WHERE MOD(number, 2) > 0
ON DUPLICATE KEY UPDATE id = id

但如果出现"字段列表中列'id'含糊不清">

,则失败。我为什么要这样做?我有一个表,有一个独特的时间序列列,这是相当大的。该列中的值应该间隔一分钟,例如:

19-Oct-2018 05:59:00
19-Oct-2018 06:00:00
19-Oct-2018 06:01:00

,但其中一些有非零秒:

19-Oct-2018 05:59:00
19-Oct-2018 06:00:00
19-Oct-2018 06:00:20
19-Oct-2018 06:01:20
19-Oct-2018 06:02:20
19-Oct-2018 06:03:00

所以我想通过四舍五入到相邻的分钟来改变它们,但这有时会导致重复,这些重复应该被丢弃。

我在这里发现了一些类似的主题,但不知道如何实现我的案例的答案。

那么,答案是在评论中找到的:

UPDATE IGNORE test
SET number = number-1
WHERE MOD(number, 2) > 0

request2:

DELETE FROM test
WHERE MOD(number, 2) > 0

最新更新