MySQL INSERT INTO ON DUPLICATE KEY UPDATE 有两个字段

MySQL INSERT INTO ON DUPLICATE KEY UPDATE with two fields

我的table:

----------------------------
| valueA | valueB | valueC |
----------------------------
|  ...   |  ...   |  ...   |
|  ...   |  ...   |  ...   |

我的代码:

INSERT INTO myTable (valueA, valueB, valueC) VALUES
(1, 2, 1), 
(1, 2, 2),
(2, 1, 3), 
(3, 4, 4)
on duplicate key update valueC = 5;

该语句的结果:

----------------------------
| valueA | valueB | valueC |
----------------------------
|   1    |   2    |   5    |
|   2    |   1    |   3    |
|   3    |   4    |   4    |

我不仅要更新新值 A = 旧值 A 和新值 B = 旧值 B,还要更新新值 A = 旧值 B 和新值 B = 旧值 A。

在我的例子中 table (1, 2, 1), (1, 2, 2) 和 (2, 1, 3) 是重复的。不只是 (1, 2, 1) 和 (1, 2, 2).

它应该是这样的:

----------------------------
| valueA | valueB | valueC |
----------------------------
|   1    |   2    |   5    |
|   3    |   4    |   4    |

如何使用尽可能少的语句来做到这一点?提前致谢。

ALTER TABLE myTable
    ADD COLUMN least_value INT AS ((LEAST(valueA, valueB))),
    ADD COLUMN greatest_value INT AS ((GREATEST(valueA, valueB))),
    ADD UNIQUE INDEX idx (least_value, greatest_value);

fiddle


what would you do if the values were strings? – Colin

LEAST/GREATEST 函数正确处理字符串值。 fiddle。唯一的问题 - 计算列的数据类型必须能够接受该值。