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

1

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

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

(我为Actian工作)

于 2015-08-17T17:52:28.297 回答