OT: SQL mit UNION

31/05/2011 - 07:27 von Lothar Geyer | Report spam
Ich weiß, dafür gibt es andere Gruppen ... tschuldigung

Ist bei einer Abfrage

Select ... (1)
UNION
Select ... (2)
UNION
Select ... (3)

immer sichergestellt (definitiv), dass die Sàtze des ersten Select vor
dem zweiten und die des zweiten vor dem dritten Select im Recordset stehen?
(Natürlich nur, wenn kein Order By angegeben ist.)

Lothar Geyer
 

Lesen sie die antworten

#1 Schmidt
31/05/2011 - 15:30 | Warnen spam
"Lothar Geyer" schrieb im Newsbeitrag
news:
Ich weiß, dafür gibt es andere Gruppen ... tschuldigung

Ist bei einer Abfrage

Select ... (1)
UNION
Select ... (2)
UNION
Select ... (3)

immer sichergestellt (definitiv), dass die Sàtze des ersten Select vor
dem zweiten und die des zweiten vor dem dritten Select im Recordset
stehen?



Eigentlich schon (gesetzt den Fall, da steht nix mehr "aussen-rum").
Würde auch aus Performance-Gründen keinen Sinn machen,
(hineinversetzt in den Entwickler, der UNION implementiert hat)
dort an dem Result-Set noch groß herumzuschrauben hinsichtlich
der "Output-Order".
Bin jedoch nicht sicher, ob es laut SQL-Standard in dem Falle
eine "echte Garantie" gibt (ob das explizit spezifiziert ist).

Aber selbst wenn es im SQL-Standard spezifiziert wàre
(dass die Order der Sub-Selects in einem UNION nicht
gebrochen werden darf/soll) - gàbe es nicht unbedingt eine
Garantie, dass die jeweilige DB-Engine sich auch an den
Standard hàlt (obwohl ein "Brechen" dieser theoretischen
Standard-Vorgabe völlig absurd wàre, da man als Entwickler
beim Abarbeiten der "UNION-SubSelect-Schleife" ohnehin
von "oben nach unten" in das Gesamt-Resultset pumpen würde.

Um statt 99.9% angenommener Sicherheit hier auf 100% zu gehen,
könntest Du in den Einzel-Selects vielleicht noch eine zusàtzliche
"konstante Spalte" (als Expression-Field) mit einer von Dir
vergebenen Select-Nummer befüllen - darüber könnte man
dann im Client noch sicherheitshalber Sortieren (oder auch
Filtern).

Aber wenn Deine Tests gegen konkrete DB-Engines allesamt
positiv aussehen, dann würde ich das für unnötig halten.
Solche einmal implementierten Sachen àndert man als Hersteller
in aller Regel nicht ohne Not, da man sich schon auch Gedanken
um genau solche Sachen macht (potentielles Brechen von SQL-
Anwendungs-Code beim User).

Olaf

Ähnliche fragen