mysql 引用INSERT的INSERT部分中的当前字段值,ON DUPLICATE KEY UPDATE

mlmc2os5  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(157)

当使用ON DUPLICATE KEY UPDATE执行INSERT语句时,是否有方法在插入语句的VALUES部分引用行和字段的当前值(如果存在)?我不想在ON DUPLICATE KEY UPDATE部分引用它。
在我的用例中,所有行都将始终存在。
像这样的东西

INSERT INTO  myTable (Col1, Col2) VALUES
('value', myTable.Col2),
('value2', myTable.Col2)
ON DUPLICATE KEY UPDATE
…

我尝试了这个方法,它将测试中的所有列都设置为空,可能是因为引用失败,它返回了空值。
我尝试在INSERT,ON DUPLICATE KEY UPDATE查询中添加一个IF函数,并使用预先准备好的占位符,这样做可能是恰当的。因此,最终版本将是这样的:

INSERT INTO  myTable (Col1, Col2) VALUES
('value', IF(?='test', myTable.Col2, ?),
('value2', myTable.Col2)
ON DUPLICATE KEY UPDATE
…
wqsoz72f

wqsoz72f1#

不能在INSERT语句的VALUES子句中引用行的当前值。必须在ON DUPLICATE UPDATE子句中引用行的当前值。
例如,如果您的输入

INSERT INTO  myTable (Col1, Col2) VALUES
('value', NULLIF(?, 'test')), -- default to current value if you insert 'test'
('value2', NULL) -- default to current value always
ON DUPLICATE KEY UPDATE
 Col2 = COALESCE(Col2, VALUES(Col2));

相关问题