Une suite de nombres
Fait partie de la section Au-delà des bases du Journey SQL de Coddy — leçon 20 sur 27.
Vous avez découvert le mot-clé WITH dans Fundamentals pour nommer une sous-requête, également appelée CTE (Common Table Expression). Une CTE recursive va encore plus loin : elle permet à la sous-requête de se référer à elle-même, construisant ainsi un résultat ligne par ligne.
La version la plus simple génère une séquence de nombres sans table sous-jacente. La structure est toujours la même :
WITH RECURSIVE counter(n) AS (
SELECT 1 -- ancre : la ligne de départ
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5 -- récursif : construire le suivant à partir du dernier
)
SELECT n FROM counterLisez-le comme ceci : commencez avec n = 1, puis continuez d'ajouter des lignes où chaque n est le n + 1 précédent, en vous arrêtant lorsque le WHERE ne correspond plus. Le résultat est 1, 2, 3, 4, 5.
Les deux parties du corps sont jointes par UNION ALL. La première est l'anchor : les lignes de départ (seed). La seconde est le recursive step : elle interroge le CTE lui-même.
Défi
FacileÉcrivez une CTE récursive nommée powers avec deux colonnes :
i: l'index d'itération,startingà1p:2élevé à la puissancei(2,4,8, …)
Arrêtez-vous une fois que p dépasserait 1000. Renvoyez les deux colonnes, triées par i croissant.
Essayez vous-même
WITH RECURSIVE powers(i, p) AS (
-- ancre : i=1, p=2
-- récursif : i+1, p*2, jusqu'à ce que p atteigne 1000
)
SELECT i, p FROM powers ORDER BY i
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.