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)