0

システムで、次のような SQL クエリを見つけました。

SELECT *, tid FROM x WHERE tid IN (213, 214, 215, 216, -1)

実際の数値は別の場所から取得されますが、クエリの最後に常に -1 を追加するので、削除してみました。システムが壊れた理由を調査した後、問題をデータベースに絞り込みました。

SELECT tid FROM x WHERE tid IN (213)   -- 213
SELECT tid FROM x WHERE tid IN (213, 214)   -- 214
SELECT tid FROM x WHERE tid IN (213, 214, 215)   -- 214, 215
SELECT tid FROM x WHERE tid IN (213, 214, 215, -1)   -- 213, 214, 215
SELECT tid FROM x WHERE tid IN (5000)   -- 5000
SELECT tid FROM x WHERE tid IN (213, 5000)   -- 5000
SELECT tid FROM x WHERE tid IN (215, 214, 213, 2147000000)   -- 215, 214
SELECT tid FROM x WHERE tid = 1 OR tid = 2   -- 2

in-list に複数の要素がある場合、Ingres はそれらの最小のものを無視しているようです。tid でクエリを実行する場合にのみ発生し、他の列では発生しません。また、それがリストに含まれている場合でも複数の OR の場合でも、最小値は常に無視されます。最後に、この SELECT でのみこのように動作します。DELETE では問題なく動作します。

Ingresがそれをしている理由は何か分かりますか?

4

1 に答える 1