Select Top 1 => 2 Datensätze - oder auch nicht

19/05/2009 - 22:10 von Josef Poetzl | Report spam
Hallo!

Heute stellte ich bei einem SQL-Versuch unter Jet fest, dass eine
Select-Top-Anweisung je nach Datentyp unterschiedliche Ergebnisse
liefern kann. (Getestet unter Ac02 und Ac07)

Gegeben:
ID | Z
-
1 | 1
2 | 2
3 | 3
4 | 1
5 | 2
6 | 3

SQL-Anweisung:
Select Top 1 ID from Tabelle Order by Z desc

meine Erwartung war:
zwei Datensàtze mit ID = 3 und 6

Ergebnis: *ein* DS mit ID = 6
Grund: ich verwendete beim Test den Datentyp Decimal(18,4) für das
Zahlenfeld.
Stelle ich auf Long, Double oder Wàhrung um, werden wie erwartet zwei
Datensàtze angezeigt.

Gibt es dafür eine Erklàrung oder fàllt das in die Kategorie "Feature"?


mfg
Josef

PS: ich weiß, dass ich mit
| Select Top 1 ID from Tabelle Order by Z desc, ID
nur einen DS erreichen kann. Aber auf genau das wollte ich hinweisen -
bekam aber erstmal große Augen, als beim "Jet-Sicherheitstest für
T-SQL-Nutzer die kaum Jet-SQL verwenden" die erwarteten zwei DS nicht
angezeigt wurden. ;-)

EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/
 

Lesen sie die antworten

#1 Mark Doerbandt
19/05/2009 - 23:01 | Warnen spam
Hallo, Josef,

Josef Poetzl:

Gegeben:
ID | Z
-
1 | 1
2 | 2
3 | 3
4 | 1
5 | 2
6 | 3

SQL-Anweisung:
Select Top 1 ID from Tabelle Order by Z desc

meine Erwartung war:
zwei Datensàtze mit ID = 3 und 6

Ergebnis: *ein* DS mit ID = 6
Grund: ich verwendete beim Test den Datentyp Decimal(18,4) für das
Zahlenfeld.
Stelle ich auf Long, Double oder Wàhrung um, werden wie erwartet zwei
Datensàtze angezeigt.



repro unter A2k3SP3.

Wird wohl an dem "gepackten" Datentypen liegen, der beim Sortieren
dann als unterschiedlich interpretiert wird. Nicht so ganz erklàrlich,
denn Decimal ist ja extra "exakt".

Gruss - Mark

Ähnliche fragen