MySQL插入具有两个字段的重复密钥更新中

问题描述 投票:1回答:1

我的桌子:

----------------------------
| valueA | valueB | valueC |
----------------------------
|  ...   |  ...   |  ...   |
|  ...   |  ...   |  ...   |
  • 主键是(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。

在我的示例中,表(1、2、1),(1、2、2)和(2、1、3)将是重复的。不只是(1、2、1)和(1、2、2)。

这是它的外观:

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

我如何用尽可能少的语句来做到这一点?预先感谢。

mysql sql-insert on-duplicate-key
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.