Sortierung innerhalb eines Subselects aussen noch verfuegbar
Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 21.03.2006 22:41:58 von Kai Ruhnau
Hi,
Ist eigentlich garantiert, dass die Sortierung innerhalb eines
Subselects nach außen getragen wird?
Also ist bei
SELECT * FROM (SELECT * FROM tabelle ORDER BY 1)
Das Ergebnis garantiert nach der ersten Spalte sortiert?
Grüße
Kai
--
This signature is left as an exercise for the reader.
Re: Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 21.03.2006 23:46:12 von Reiner Wagner
Hallo,
was spricht gegen
SELECT * FROM (SELECT * FROM tabelle) ORDER BY 1
Dann sollte es garantiert sein.
Gruß,
Reiner
Re: Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 22.03.2006 00:00:23 von Kai Ruhnau
Reiner Wagner wrote:
> was spricht gegen
>
> SELECT * FROM (SELECT * FROM tabelle) ORDER BY 1
>
> Dann sollte es garantiert sein.
Das geht, je nach dem was die äußere Abfrage noch macht, leider nicht immer.
Grüße
Kai
--
This signature is left as an exercise for the reader.
Re: Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 22.03.2006 21:03:27 von dnoeth
Kai Ruhnau wrote:
>> SELECT * FROM (SELECT * FROM tabelle) ORDER BY 1
>>
>> Dann sollte es garantiert sein.
>
>
> Das geht, je nach dem was die äußere Abfrage noch macht, leider nicht
> immer.
Zeig dafür doch mal ein Beispiel...
Ohne Order By ist im SQL nie eine Reihenfolge garantiert.
Dieter
Re: Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 22.03.2006 21:42:59 von Dominik Echterbruch
Dieter Noeth wrote:
> Kai Ruhnau wrote:
>
>>> SELECT * FROM (SELECT * FROM tabelle) ORDER BY 1
>>>
>>> Dann sollte es garantiert sein.
>>
>>
>>
>> Das geht, je nach dem was die äußere Abfrage noch macht, leider nicht
>> immer.
>
>
> Zeig dafür doch mal ein Beispiel...
Es geht um ein GROUP_CONCAT(), siehe [1]. Dort sollen eben
die Werte im GROUP_CONCAT genau in der Reihenfolge aggregiert werden,
wie das Subselect sie zurück liefert.
[1] dv9aov$k1b$03$1@news.t-online.com
Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786
Re: Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 23.03.2006 08:28:38 von Kai Ruhnau
Dieter Noeth wrote:
> Kai Ruhnau wrote:
>
>>> SELECT * FROM (SELECT * FROM tabelle) ORDER BY 1
>>>
>>> Dann sollte es garantiert sein.
>>
>>
>> Das geht, je nach dem was die äußere Abfrage noch macht, leider nicht
>> immer.
>
> Zeig dafür doch mal ein Beispiel...
>
> Ohne Order By ist im SQL nie eine Reihenfolge garantiert.
>
> Dieter
SET @last_irgendwas='';
SET @i=0;
SELECT @i:=@i+IF(@last_irgendwas!=irgendwas,1,0),
@last_irgendwas:=irgendwas,
sub_tabelle.*
FROM (SELECT * FROM tabelle ORDER BY sortierspalte) AS sub_tabelle
GROUP BY 1
ORDER BY sortierspalte;
Diese Abfrage könnte innerhalb von SQL aufeinanderfolgende Datensätze
herausfiltern, aber nur dann, wenn das "ORDER BY sortierspalte"
innerhalb des Subselects die Daten geordnet zurückgibt.
Grüße
Kai
Re: Sortierung innerhalb eines Subselects aussen noch verfuegbar
am 23.03.2006 18:22:27 von dnoeth
Kai Ruhnau wrote:
> SET @last_irgendwas='';
> SET @i=0;
>
> SELECT @i:=@i+IF(@last_irgendwas!=irgendwas,1,0),
> @last_irgendwas:=irgendwas,
> sub_tabelle.*
> FROM (SELECT * FROM tabelle ORDER BY sortierspalte) AS sub_tabelle
> GROUP BY 1
> ORDER BY sortierspalte;
>
> Diese Abfrage könnte innerhalb von SQL aufeinanderfolgende Datensätze
> herausfiltern, aber nur dann, wenn das "ORDER BY sortierspalte"
> innerhalb des Subselects die Daten geordnet zurückgibt.
Solange es nicht offiziell in der Doku garantiert wird, würde ich sowas
nie machen/versuchen.
Selbst wenn es heute funktionieren würde, kann es mit dem nächsten
Patchlevel wieder ganz anders ausschauen. Außerdem ist es proprietär und
mit einem anderen DBMS geht's nicht.
Oracle z.B. unterstützt solche Sortierungen in Derived Tables, aber
Oracle macht sowieso viele seltsame Sachen.
Im Standard SQL würde man dafür OLAP-Funktionen nehmen...
Dieter