「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'" を使用しない 2 番目のタイプのクエリが興味深い
select count(*) into isSomething from ... where id = NEW.id
あたかも 'foo' が結果にないかのように、正しい結果:3 を返します。