我正在尝试:
- 从符合某些条件的唯一列中选择值,例如,可以被2整除的数字
- 更改这些数字
- 将结果写回表中。如果修改后的数字与已经存在的数字重复,则跳过此行插入
创建表:
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