我们在系统中发现了一个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可能会这样做?
答案 0 :(得分:1)
我只是在最近的Ingres版本上快速测试了这个(10.2),但我没有得到这种行为,我总是得到所有匹配的行。
我说这是一个错误,如果我是你,我会用Actian Support提出它。
(我为Actian工作)