Mysql 关于一个字段的重复键条件(IF)设置

问题描述 投票:0回答:1

我正在使用重复键来更新 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 if-statement switch-statement on-duplicate-key
1个回答
0
投票

对于 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)
© www.soinside.com 2019 - 2024. All rights reserved.