Wer sich mal ein bißchen näher mit SQL beschäftigt, wird über die Ausdrucksmächtigkeit und Performance erstaunt sein. SQL kann eben doch mehr als simple SELECT-Anweisungen zu verarbeiten.
Mal ein Beispiel, was man alles mit UPDATE-Anweisungen machen kann:
Wir haben folgende Tabellen
1. Team
- Teamid
- Teamname
- AnzahlMitglieder
2. User
- Userid
- Username
- Teamid
Nun wollen wir das noch leere Feld Team.AnzahlMitglieder aus der Tabelle User berechnen. Naiver Ansatz ist wahrscheinlich folgendes UPDATE-Statement, wenn man sich vorher klar macht, dass man Subqueries verwenden kann, um Werte zu setzen:
[code lang=’sql‘]UPDATE Team
SET
AnzahlMitglieder =
(SELECT COUNT(*)
FROM User
WHERE User.Teamid = Team.Teamid )[/code]
Problem an dieser Abfrage ist allerdings, dass für jede Zeile, die aktualisiert werden soll, das Subquery ausgeführt wird. Bei kleineren Datenmengen macht das nichts, wenn es allerdings Millionen an Datensätze sind, braucht das UPDATE ewig.
Wie könnte die Lösung aussehen? Richtig, man führt den Subquery nur 1x für alle Teams aus und selektiert den jeweiligen Eintrag dann für das entsprechende Team:
[code lang=’sql‘]UPDATE
Team,
(SELECT teamid,
COUNT(*) as anzahl,
FROM User) AS usersub
SET
Team.AnzahlMitglieder = usersub.anzahl
WHERE
Team.Teamid = usersub.teamid)[/code]