MySQL插入更新需求:ID存在时仅更新现有记录的NULL值列
解决方案:仅更新现有记录中NULL值列的INSERT ON DUPLICATE KEY逻辑
你需要的是仅更新目标表中值为NULL的列,核心是用IFNULL()函数判断现有列的状态:如果目标列当前是NULL,就用新数据覆盖;否则保留原有值。
修正后的SQL语句如下:
INSERT INTO ui_table(MDMID, FirstName, Lastname, Mail, Address, City, State, Zip, ProfileStatus, TAID) SELECT im.MDMID, im.FirstName, im.Lastname, im.Mail, im.Address, im.City, im.State, im.Zip, im.ProfileStatus, im.TAID FROM intermediate im ON DUPLICATE KEY UPDATE FirstName = IFNULL(FirstName, im.FirstName), Lastname = IFNULL(Lastname, im.Lastname), Mail = IFNULL(Mail, im.Mail), Address = IFNULL(Address, im.Address), City = IFNULL(City, im.City), State = IFNULL(State, im.State), Zip = IFNULL(Zip, im.Zip), ProfileStatus = IFNULL(ProfileStatus, im.ProfileStatus), TAID = IFNULL(TAID, im.TAID);
关键说明:
IFNULL(目标列, 新值):这个函数会先检查ui_table中的对应列是否为NULL。如果是,就用intermediate表(别名im)的新值替换;如果不是,就保留目标列原有值,完全匹配你的需求。- 移除了
MDMID的更新语句:触发ON DUPLICATE KEY的前提就是MDMID已存在,更新这个主键/唯一键属于冗余操作,可直接省略。 - 确保
MDMID在ui_table中是主键或唯一约束:这是ON DUPLICATE KEY UPDATE生效的必要条件,否则无法识别重复记录。
内容的提问来源于stack exchange,提问作者NIKI
相关产品推荐
相关产品推荐

