Eine Zahlenfolge
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy. Lektion 20 von 27.
Du hast das Schlüsselwort WITH in Fundamentals zum Benennen einer Unterabfrage kennengelernt, auch bekannt als CTE (Common Table Expression). Eine rekursive CTE geht noch einen Schritt weiter: Sie ermöglicht es der Unterabfrage, auf sich selbst zu verweisen und ein Ergebnis Zeile für Zeile aufzubauen.
Die einfachste Version erzeugt eine Sequenz von Zahlen ohne eine zugrunde liegende Tabelle. Die Struktur ist immer dieselbe:
WITH RECURSIVE counter(n) AS (
SELECT 1 -- Anker: die Startzeile
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5 -- rekursiv: baue das Nächste aus dem Letzten
)
SELECT n FROM counterLies es wie folgt: Starte mit n = 1, füge dann weiterhin Zeilen hinzu, bei denen jedes n das vorherige n + 1 ist, und stoppe, wenn das WHERE nicht mehr zutrifft. Das Ergebnis ist 1, 2, 3, 4, 5.
Die beiden Teile des Körpers werden durch UNION ALL verbunden. Der erste ist der Anker: die Ausgangszeilen. Der zweite ist der rekursive Schritt: Er fragt die CTE selbst ab.
Aufgabe
EinfachSchreiben Sie eine rekursive CTE namens powers mit zwei Spalten:
i: der Iterationsindex,startingbei1p:2hochi(2,4,8, …)
Stoppen Sie, sobald p den Wert 1000 überschreiten würde. Geben Sie beide Spalten zurück, aufsteigend sortiert nach i.
Probier es selbst
WITH RECURSIVE powers(i, p) AS (
-- Anker: i=1, p=2
-- rekursiv: i+1, p*2, bis p 1000 erreicht
)
SELECT i, p FROM powers ORDER BY i
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Über die Grundlagen hinaus
Übe selbstständig: SQL-Playground