mahemoff Asked: 2016-01-16 10:44:56 +0800 CST2016-01-16 10:44:56 +0800 CST 2016-01-16 10:44:56 +0800 CST 用不同的列更新多行 772 我正在尝试执行批量 MySQL 更新,我知道每行只需要更新某些列,例如,只有 A 行的“名称”更改为“Sue”,B 行的“名称”和“地址”更改为“Joe”和“长青台”等。所有的列和数据可能不同。 大多数多行示例通常为每一行更新相同的列,但是 SQL 命令有没有办法仅指定每行更改的内容? mysql 2 个回答 Voted Best Answer lamplightdev 2016-01-16T12:44:08+08:002016-01-16T12:44:08+08:00 就像是: INSERT INTO user (id, name, address, telephone) VALUES (1, 'Tim', NULL, NULL), (2, NULL, 'America', '000') ON DUPLICATE KEY UPDATE name = IF(ISNULL(VALUES(name)), name, VALUES(name)), address = IF(ISNULL(VALUES(address)), address, VALUES(address)), telephone = IF(ISNULL(VALUES(telephone)), telephone, VALUES(telephone)) 将起作用(保持NULL字段不变),假设该id字段是主键并将触发DUPLICATE KEY UPDATE,尽管我无法评论它的效率。 Rick James 2016-01-16T11:39:15+08:002016-01-16T11:39:15+08:00 如果新数据在单独的表中,您可以进行“多表”更新以将数据传输到主表中。 要处理“可选”地址,它可以NULL在单独的表中,然后使用IF()orIFNULL()或其他一些条件代码来单独保留旧值。 但我可能会简单地创建一堆单独的UPDATE语句。
就像是:
将起作用(保持
NULL
字段不变),假设该id
字段是主键并将触发DUPLICATE KEY UPDATE
,尽管我无法评论它的效率。如果新数据在单独的表中,您可以进行“多表”更新以将数据传输到主表中。
要处理“可选”地址,它可以
NULL
在单独的表中,然后使用IF()
orIFNULL()
或其他一些条件代码来单独保留旧值。但我可能会简单地创建一堆单独的
UPDATE
语句。