Ich gehe durch den Schmerz der Normalisierung einer schrecklichen Legacy-Datenbank und habe entdeckt, was ich denke, ist ein Fehler mit dem DBMS.Sollte ein ORDER BY jemals die Anzahl der zurückgegebenen Zeilen einer SELECT-Abfrage beeinflussen?
Diese Abfrage gibt die Ergebnisse als ich erwarten:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_id, thing_name;
(16 rows)
Das erste Mal, dass ich die Abfrage lief, hatte ich versehentlich die falschen Spalten in der ORDER BY, wie unten verwendet:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_name, location;
(33 rows)
Beachten Sie, dass das einzige, was geändert werden muss, ORDER BY ist und die Anzahl der zurückgegebenen Zeilen von 16 auf 33 steigt. Die Ergebnisse, die es gibt, sind nicht DISTINCT, wie die Abfrage angibt.
Ich glaube, das ist ein offensichtlicher Fehler, aber ein Kollege sagt, dass es normal ist, denn wenn wir nach "Ort" bestellen, wird es unsichtbar in die Ergebnisse aufgenommen.
Sollte die ORDER BY jemals die Anzahl der in einer SELECT-Abfrage zurückgegebenen Zeilen beeinflussen?
EDIT: Ich hatte eine andere Person, um die Abfragen zu sehen, und ich kopierte die Abfragen in zwei separate Dateien, dann führte einen Diff-Befehl auf ihnen. Es ist zu 100% sicher, dass der einzige Unterschied zwischen den beiden Abfragen die in ORDER BY aufgelisteten Spalten sind.
UPDATE: Ingres haben seit Patch 14301 mit Bugfix veröffentlicht: "Bug 126640 (GENERIC) Abfrage mit Order-by-Ausdruck und distinkte Aggregat gibt mehr Zeilen als erwartet zurück. Die Spalten im Ausdruck Reihenfolge sind nicht in der Auswahlliste . "
Die fragliche Abfrage führt nun zu einem Fehler, da die Ergebnisse nicht korrekt sind.
Welche DB ist das? –
Tag sagt ingres – ilanco
Konnten Sie die genaue Frage zeigen? –