2011-01-16 14 views
1

Können wir nach einer Spalte sortieren, die in der SELECT-Klausel nicht vorhanden ist? Warum?Sortierung nach Klausel Frage

+2

NICHT SCHREIEN - bitte! Willkommen bei SO, aber wir mögen es nicht, angeschrien zu werden. Ich werde Ihre Frage zumindest so weit bringen, aber für die Zukunft - alle Caps werden jedes Mal Beschwerden bekommen. –

+0

Was Jonathan bedeutet, ist, dass in Großbuchstaben schreiben. In der Internetwelt wird es als Schreien betrachtet. In einer Situation selbst gewesen :) –

+0

[SO 2590621] (http://stackoverflow.com/questions/2590621/how-to-select-distinct-rows-without-the-order-by-field-selected) ist etwas verwandt. So auch ist [SO 265628] (http://stackoverflow.com/questions/265628/order-by-items-must-appear-in-the-select-list-if-select-distinct-ispecified) . –

Antwort

5

Es hängt von der DBMS (und oft der Version des DBMS - ältere Versionen sind starrer als neuere Versionen).

Heutzutage können die meisten DBMS tatsächlich nach einer Spalte sortieren, die nicht in der Auswahlliste aufgeführt ist. Die früheren SQL-Standards erforderten jedoch, dass die Spalten in der ORDER BY-Klausel ebenfalls in der Auswahlliste angezeigt wurden.

Das DBMS verarbeitet es, indem es die nicht ausgewählte Spalte zur Ergebnismenge hinzufügt, sortiert und dann die nicht ausgewählte Spalte wegprojiziert (löscht).

Beachten Sie, dass die Verwendung der Technik bedeutet, dass die Datenreihenfolge Informationen, die nicht verfügbar sind, durch einfaches Betrachten der Daten - was heißt wesentlichen Bestellung. Dies ist normalerweise keine sehr gute Idee (aber es ist populär genug, dass die meisten DBMS es Ihnen erlauben).

0

Wenn das DBMS SQL-Server ist, lautet die Antwort ja. Aber ich habe bemerkt, dass das Tag von Jonathan bearbeitet wurde und vielleicht trifft diese Antwort nicht auf Ihr System zu.

+0

Ich habe die Tags nicht geändert (es war [skaffman] (http://stackoverflow.com/users/21234/skaffman), die das getan haben) - Ich habe die Lautstärke einfach auf den Fragetext gestellt. –

+0

@ Jonathan Sorry meine Schuld. Danke für die Nachricht. –

3

Die ORDER BY beziehen sich auf die Tabelle (n) in der FROM-Klausel, es sei denn, die Semantik der Sortierung wird durch DISTINCT oder GROUP BY geändert.

Dies ist OK weil Informationen von myTable1 steht zur Verfügung:

SELECT col1, col3, FROM mytable1 ORDER BY col2 

Diese nicht becase col2 keine Bedeutung nach dem DISTINCT hat:

SELECT DISTINCT col1, col3, FROM mytable1 ORDER BY col2 

Wenn col1 wird col3 kollabiert durch DISTINCT Sie verlieren Werte von col2. Das gleiche gilt für eine GROUP BY (DISTINCT ist effektiv eine einfache GROUP BY).