私は恐ろしいレガシーデータベースを正規化するという苦痛を経験しており、DBMS のバグであると思われるものを発見しました。
このクエリは、期待どおりの結果を返します。
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 クエリで返される行数に影響を与える必要がありますか?
編集:別の人にクエリを見てもらい、クエリを2つの別々のファイルにコピーしてから、それらに対してdiffコマンドを実行しました。2 つのクエリの唯一の違いは、ORDER BY にリストされている列であることは 100% 確実です。
更新: Ingres は、バグ修正を含むパッチ 14301 をリリースして以来、次のように述べています。
つまり、結果が正しくないため、問題のクエリはエラーになります。