我有一个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;
field1
,field2
,another_field
,max
,min
都是上面名为sample
的同一个表的列。
NEW.value
和NEW.id
来自另一个运行此触发器的表。
现在,我必须添加另一个SELECT,然后再添加一个UPDATE以检查这个。
答案 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;