Ingres - 查询“WHERE tid IN(...)”忽略列表中的最小值

时间:2015-08-17 11:57:30

标签: sql ingres

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

1 个答案:

答案 0 :(得分:1)

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

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

(我为Actian工作)