システムで、次のような 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がそれをしている理由は何か分かりますか?