Bonjour à tous,

Je vais aller droit au but :
Je ne comprends pas vraiment la logique d'une requête récursive sur CTE.

code récupéré là
http://sqlpro.developpez.com/cours/s...te-recursives/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
-- creation de la table
CREATE TABLE T_VEHICULE
(VHC_ID         INTEGER NOT NULL PRIMARY KEY,
 VHC_ID_FATHER  INTEGER FOREIGN KEY REFERENCES T_VEHICULE (VHC_ID),
 VHC_NAME       VARCHAR(16))
-- population
INSERT INTO T_VEHICULE VALUES (1, NULL, 'ALL')
INSERT INTO T_VEHICULE VALUES (2, 1, 'SEA')
INSERT INTO T_VEHICULE VALUES (3, 1, 'EARTH')
INSERT INTO T_VEHICULE VALUES (4, 1, 'AIR')
INSERT INTO T_VEHICULE VALUES (5, 2, 'SUBMARINE')
INSERT INTO T_VEHICULE VALUES (6, 2, 'BOAT')
INSERT INTO T_VEHICULE VALUES (7, 3, 'CAR')
INSERT INTO T_VEHICULE VALUES (8, 3, 'TWO WHEELS')
INSERT INTO T_VEHICULE VALUES (9, 3, 'TRUCK')
INSERT INTO T_VEHICULE VALUES (10, 4, 'ROCKET')
INSERT INTO T_VEHICULE VALUES (11, 4, 'PLANE')
INSERT INTO T_VEHICULE VALUES (12, 8, 'MOTORCYCLE')
INSERT INTO T_VEHICULE VALUES (13, 8, 'BICYCLE')
 
WITH 
   tree (data, id)
   AS (SELECT VHC_NAME, VHC_ID_FATHER
       FROM   T_VEHICULE
       WHERE  VHC_NAME = 'MOTORCYCLE'
       UNION ALL
       SELECT VHC_NAME, VHC_ID_FATHER
       FROM   T_VEHICULE V
              INNER JOIN tree t
-- ne comprends pas cette jointure là
                    ON t.id = V.VHC_ID)
SELECT *
FROM   tree
Cette jointure "ON t.id = V.VHC_ID" me reste étrangère.

Questions :

1) Pourquoi a-t'on v.vhc_id et pas v.vhc_father dans ON t.id = V.VHC_ID) ? Je ne comprends pas comment on passe au niveau suivant puisqu'on sélectionne le même id que celui dont on dispose déjà (évidemment je sais que j'ai tord là mais je ne comprends pas pourquoi).
En fait, je ne comprends pas la double sélection à cause de cela.

2) il me semble que les colonnes (data, id) dans tree (data, id) sont facultatives, non?

Je ne suis pas vraiment dans la partie informatique mais je ne peux plus passer à côté, ça me plombe de ne pas comprendre. Attention, je ne suis pas très intelligent, veuillez ne pas prendre trop de raccourcis dans l'explication

Merci à tous