Я мучаюсь от нормализации ужасной устаревшей базы данных и обнаружил, как мне кажется, ошибку в СУБД.
Этот запрос возвращает результаты, как я и ожидал:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_id, thing_name;
(16 rows)
При первом выполнении запроса я непреднамеренно использовал неправильные столбцы в ORDER BY, как показано ниже:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_name, location;
(33 rows)
Обратите внимание, что единственное, что нужно изменить, это ORDER BY, а количество возвращаемых строк увеличивается с 16 до 33. Результаты, которые он дает, не являются DISTINCT, как указано в запросе.
Я считаю, что это явная ошибка, но коллега говорит, что это нормально, потому что, когда мы упорядочиваем по «местоположению», он выбран и включен невидимо в результаты
Должен ли ORDER BY когда-либо влиять на количество строк, возвращаемых в запросе SELECT?
РЕДАКТИРОВАТЬ: я попросил другого человека просмотреть запросы, И я скопировал запросы в два отдельных файлов, а затем запускал для них команду diff.Со 100% уверенностью можно сказать, что единственная разница между двумя запросами заключается в том, что e столбцы, перечисленные в ORDER BY.
ОБНОВЛЕНИЕ: Ingres выпустила исправление 14301 с исправлением: «Ошибка 126640 (ОБЩАЯ) Запрос с выражением упорядочивания и отдельным агрегатом возвращает больше строк, чем ожидалось. Столбцы в выражении упорядочивания отсутствуют в списке выбора. "
т. е. рассматриваемый запрос теперь приведет к ошибке, поскольку результаты неверны.