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