我有一张桌子,可以说4个字段。
表: id(autoincremental),col1,col2,col3
有几行包含id,col1和col2的数据。
Col3为空。
我想用一个查询在现有行中用值填充col3,
INSERT INTO table(id, col3)
VALUES
(1, 'value1'),
(2, 'value2'),
(3, 'value3'),
...
ON DUPLICATE KEY UPDATE
id = VALUES(id),
col3 = VALUES(col3);
但是出现错误,因为col1和col2没有默认值。 我只想更新col3,并保留其他列值。 我该怎么办?
答案 0 :(得分:1)
您可以使用一个简单的更新语句:
Update yourtable t
Set t.col3 = case when t.id = 1 then ‘value1’
case when t.id = 2 then ‘value2’
.....
else t.col3 end;
您还可以过滤所需的ID,以获得更好的性能
答案 1 :(得分:0)
您可以这样更新:
ON DUPLICATE KEY UPDATE
col3 = VALUES(col3);
这将保留update语句中未包含的字段的当前值。
我再次阅读了问题,看来您的插入内容也需要col1和col2。您说他们没有默认值,所以我会
所以您不能更改表结构,我的最终查询如下:
INSERT INTO table(id, col1, col2, col3) VALUES
(1, '', '', 'value1'),
(2, '', '', 'value2'),
(3, '', '', 'value3')
-- ...
ON DUPLICATE KEY UPDATE
col1 = col1,
col2 = col2,
col3 = VALUES(col3);
当字段没有默认值且不能为空时,插入查询 必须 包含该字段的值。因此,您的问题不在查询的更新部分,而在插入部分。
答案 2 :(得分:0)
我相信@Lukasz Szozda评论是解决此问题的最佳方法。因此,我将选择它作为解决方案。谢谢。
将col1,col2标记为可为空。