MySQL INSERT INTO ON DUPLICATE KEY UPDATE,包含两个字段



我的表:

----------------------------
| valueA | valueB | valueC |
----------------------------
|  ...   |  ...   |  ...   |
|  ...   |  ...   |  ...   |
  • 主键为(valueA,valueB(
  • 如果条目已存在,我希望插入值或更新值C

我的代码:

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。

在我的示例中,表(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);

小提琴


如果值是字符串,您会怎么做?–Colin

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

最新更新