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'" を使用しない 2 番目のタイプのクエリが興味深い

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

あたかも 'foo' が結果にないかのように、正しい結果:3 を返します。

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 に答える