如果其他2列是Equal则更新

时间:2017-03-13 00:29:32

标签: mysql

我有一个MySQL触发器,是否可以在一次更新中执行以下操作?

IF sample.field1 = sample.field2 THEN sample.field3 = 1 ENDIF;

UPDATE `sample` SET
`max` = GREATEST(NEW.value, VALUES(max)),
`min` = LEAST(NEW.value, VALUES(min)),

/* THIS IS WHERE IM STUCK */
IF field1 = field2 THEN another_field = 1;


WHERE `id` = NEW.id;
  1. field1field2another_fieldmaxmin都是上面名为sample的同一个表的列。

  2. NEW.valueNEW.id来自另一个运行此触发器的表。

  3. 现在,我必须添加另一个SELECT,然后再添加一个UPDATE以检查这个。

3 个答案:

答案 0 :(得分:1)

您可以使用CASE

UPDATE `sample` SET
`max` = GREATEST(NEW.value, VALUES(max)),
`min` = LEAST(NEW.value, VALUES(min)),
anotherField = CASE WHEN field1 = field2 THEN 1 ELSE anotherField END;
WHERE `id` = NEW.id;

但是,我认为使用两个查询是一种更好的方法,您只需操纵必须使用单独查询操作的记录。

答案 1 :(得分:1)

只需使用:

UPDATE `sample` SET
`max` = GREATEST(NEW.value, VALUES(max)),
`min` = LEAST(NEW.value, VALUES(min)),   
`another_field` = IF(field1 = field2, 1, `another_field`)
 WHERE `id` = NEW.id;

答案 2 :(得分:0)

另一种选择:

set @another_field = 0;
select @fld1 :=field1 ,@fld2:=field2 from sample where id = New.id;
if(@fld1=@fld2) then
@another_field=1;
end if;
/*Execute an update here*/
UPDATE `sample` SET
`max` = GREATEST(NEW.value, VALUES(max)),
`min` = LEAST(NEW.value, VALUES(min)),
your_another_field=@another_field
where id=NEW.id;