Ingres - запрос "WHERE tid IN (...)" игнорирует самое низкое значение в списке

Мы нашли в нашей системе запрос 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

Кажется, что если в списке есть больше чем один элемент, Ingres игнорирует самый маленький из них. Это происходит только при запросе tid, это не происходит ни с какими другими столбцами. Также не имеет значения, когда он находится в списке или просто несколько OR, самое низкое значение всегда игнорируется. Наконец, он ведет себя так только в этом SELECT, для удаления он работает нормально.

Есть идеи, почему Энгр может это делать?

1 ответ

Решение

Я быстро проверил это только на ближайшей версии Ingres (10.2), но я не получил такого поведения, я всегда получал все соответствующие строки.

Я бы сказал, что это ошибка, и я бы поднял ее с помощью Actian Support на вашем месте.

(Я работаю на Actian)

Другие вопросы по тегам