我正在使用重复键来更新 mySQL DB v 8.0.35(AWS RDS 实例)中的数据
我想用新值更新选定的字段。另外,仅当特定字段 (templateURL) 发生更改时,才将进一步的字段 (up[dated) 设置为 1。如果只有其他字段发生了更改,则应保留旧值 (0)。
我相信我应该能够根据之前类似问题的帖子使用 IF 或 CASE 来实现这一目标。但是,看起来这用于使用旧的值(字段)语法,bit 不适用于新的别名语法。
运行此 SQL 时,我收到“您的 SQL 中有错误”错误:
insert into data_manager.rars_CoachTypes c
(coach_type,template_height,template_width,seat_height,seat_width,toc,templateURL,serviceId,latest_depart_date,our_template_width,our_template_height,features,imported) values ? as INSERTDATA
on duplicate key update
template_height=INSERTDATA.template_height,
template_width=INSERTDATA.template_width,
seat_height=INSERTDATA.seat_height,
seat_width=INSERTDATA.seat_width,
templateURL=INSERTDATA.templateURL,
latest_depart_date=INSERTDATA.latest_depart_date,
updated = IF (c.templateURL<>INSERTDATA.templateURL)
我也尝试过用CASE而不是IF,但结果是一样的。
updated = CASE WHEN c.templateURL<>INSERTDATA.templateURL THEN 1 ELSE 0 END
我添加了别名“c”,因为我之前收到另一个错误,指出字段 templateURL 不明确...不知道为什么它应该这样认为?
对于 mysql 你的语法非常不对
参见手册
一定是这样
insert into data_manager.rars_CoachTypes
(coach_type,template_height,template_width,seat_height,seat_width,toc,templateURL,serviceId,latest_depart_date,our_template_width,our_template_height,features,imported) values (1,1,1,1,1,1,1,1,1,1)
on duplicate key update
template_height=VALUES(template_height),
template_width=VALUES(template_width),
seat_height=VALUES(seat_height),
seat_width=VALUES(seat_width),
templateURL=VALUES(templateURL),
latest_depart_date=VALUES(latest_depart_date),
updated = IF (templateURL<>VALUES(templateURL),1,0)