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 工作)
我们在我们的系统中发现了一个 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 工作)