触发器和控制台的结果不同(MYSQL 5.1.57)

时间:2012-09-15 12:56:43

标签: mysql

如果'foo'在column1值中,我想将'isSomething'设置为1,否则'isSomething'为0

问题是:同一个查询从控制台和触发器给出不同的结果。 控制台版本可以提供良好的结果。

(子查询中的一切都是一样的,在触发器中我总是得到相同的New.id! - 测试用例)

-----TRIGGER (AFTER UPDATE)
...
DECLARE isSomething INT DEFAULT 0;

    select if('foo' IN (select column1 from ...where id=NEW.id),1,0)
    INTO isSomething;
...
LOG: isSomething:0

-----CONSOLE 
    select if('foo' IN (select column1 from ...where id=232),1,0)
into @isSomething;

select @isSomething;
...
CONSOLE: 1 (good result!!!)

评论:我也尝试了以下查询

select count(*) into  isSomething from ... where id = NEW.id and column1='foo'

它的行为与第一个查询相同。

更新1

有趣的是第二种类型的查询没有“和column1 ='foo'”

  select count(*) into  isSomething from ... where id = NEW.id

给出正确的结果:3,好像'foo'不会出现在结果中。

1 个答案:

答案 0 :(得分:1)

<强>解

我不知道为什么,但如果我使用表别名(这里:ft),那么查询有效,结果很好......

    select count(*)
    into  isSomething
    from footable ft WHERE ft.column1 = 'foo' AND ft.id = NEW.id ....;

感谢大家的努力!

Cs中。