Ingres - 查询 "WHERE tid IN (...)" 忽略列表中的最低值

Ingres - query "WHERE tid IN (...)" ignores the lowest value in the list

我们在我们的系统中发现了一个 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 会这样做吗?

我只在最近的 Ingres 版本 (10.2) 上快速测试了这个,但我没有得到这个行为,我总是得到所有匹配的行。

我会说这是一个错误,如果我是你,我会通过 Actian Support 提出它。

(我为 Actian 工作)