0

如果 '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

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

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

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

4

1 回答 1

1

解决方案

我不知道为什么,但是如果我使用表别名(这里:ft),那么查询就可以工作并且结果很好......

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

感谢大家的努力!

CS。

于 2012-09-16T11:13:30.113 回答