Entwickler-Ecke

Datenbanken - Frage zur korrelierten Unterabfrage in SQL


Kossy - Do 13.09.12 20:51
Titel: Frage zur korrelierten Unterabfrage in SQL
Hallo zusammen !

Ich beziehe mich in meiner Frage auf diesen Link: http://www.oc-s.com/tutorials/sql/tuto34.htm

Dort ist folgendes SQL Beisiel aufgeführt (Es zeigt die Kunden mit den höchsten Kontoständen an ihren Orten):


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
SELECT nachname, ort, konto
       FROM kunde dieser_kunde
       WHERE konto =
       (SELECT MAX(konto)
               FROM kunde
               WHERE ort = dieser_kunde.ort)
       ORDER BY ort



Dazu habe ich jetzt eine konkrete Frage. Die Unterabfrage wird ja für jede in Frage kommende Kandidatenzeile aus der äußeren Frage einmal jeweils ausgeführt.

Im Beispiel handelt es sich um Ortschaften. Für jeden Ort wird jetzt die Unterabfrage ausgeführt. Wird jetzt eine Ortschaft (z.B. Hamburg), die öfters in der äußeren Abfrage als Tupel auftritt, immer wieder überschrieben, sobald eine passendere Ortschaft zur Unterabfrage gefunden wurde? Denn eine Ortschaft darf ja durch diesen Abfragetypen nur einmal im Endergebnis vorkommen bzw. aufgenommen werden.


Viele Grüße
Kossy

Moderiert von user profile iconNarses: Code- durch SQL-Tags ersetzt


bummi - Fr 14.09.12 07:34

Ich schätze durch die Optimierung wird

Quelltext
1:
2:
3:
SELECT MAX(konto)
               FROM kunde
               WHERE ort = dieser_kunde.ort

genau einmal als

Quelltext
1:
2:
3:
SELECT ort,MAX(konto) as Konto
               FROM kunde
               Group by Ort

ausgeführt und dann mit der äußeren Abfrage "gejoint"