www.eztree-msdn.com \(Laurent Jordi\) Enlever le s à infos pour me contacter par mail
Salut à tous
J'ai récupéré ça dans un autre forum...
Il parait que sous oracle ça permet l'ascendence d'un enregistrement (le
père et son père et le père du père du père jusqu'au saint père) de
récupérer la liste des pères d'une table hiérarchique...
SELECT ... FROM Table CONNECT BY PRIOR Clepere=Cle...
Ca marcherait ça sous SQL Server 2000 ?
Vous ne pouvez même pas immaginer comment ça me rendrait service... :)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
Non, c'est propre à Oracle.
Mais le fature version de SQL Server permettra la récursion des requêtes via la notion de cycle incluse dans la norme SQL:1999 (alors que la solution Oracle n'est pas normative, mais spécifique à l'éditeur)...
La syntaxe d'une telle requête sera par exemple :
WITH RECURSIVE trajet (depart, arrivee) AS (SELECT VLS_DEPART, VLS_ARRIVEE FROM T_VOLS_VLS UNION ALL SELECT debut.depart, suite.VLS_ARRIVEE FROM trajet debut INNER JOIN T_VOLS_VLS suite ON debut.arrive = suite.VLS_DEPART) SEARCH BREADTH FIRST BY VLS_DEPART, VLS_ARRIVEE SET etape CYCLE VLS_DEPART SET debutCycle '1' DEFAULT '0' USING traceCycle SELECT * FROM trajet WHERE depart = 'NICE' AND arrivee = 'BORDEAUX' ORDER BY etape
Dont un résultat serait par exemple :
depart arrivee debutCycle traceCycle ---------------- ---------------- ----------- ------------------------------------ PARIS MARSEILLE 0 [PARIS] PARIS LYON 0 [PARIS] PARIS BORDEAUX 0 [PARIS] BORDEAUX MARSEILLE 0 [BORDEAUX] BORDEAUX NICE 0 [BORDEAUX] NICE LYON 0 [NICE] BORDEAUX LILLE 0 [BORDEAUX] PARIS LYON 0 [PARIS, MARSEILLE] PARIS BORDEAUX 0 [PARIS, MARSEILLE] PARIS PARIS 1 [PARIS, MARSEILLE] PARIS LYON 0 [PARIS, BORDEAUX] PARIS NANTES 0 [PARIS, BORDEAUX] BORDEAUX LYON 0 [BORDEAUX, MARSEILLE] BORDEAUX BORDEAUX 1 [BORDEAUX, MARSEILLE] BORDEAUX PARIS 0 [BORDEAUX, NICE] NICE NICE 1 [NICE, LYON] NICE NANTES 0 [NICE, LYON] MARSEILLE NICE 0 [MARSEILLE, LYON] MARSEILLE NANTES 0 [MARSEILLE, LYON] MARSEILLE LILLE 0 [MARSEILLE, BORDEAUX] LYON LYON 1 [LYON, NICE] LYON PARIS 0 [LYON, NICE] NICE MARSEILLE 0 [NICE, PARIS] ...
Mais en attendant, point besoin de tout cela pour dérécursiver un parcours d'arbre modélisé sous forme SQL. Il suffit d'utiliser la représentation intervallaire... A lire : http://sqlpro.developpez.com/Tree/SQL_tree.html
A +
-- Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me contacter par mail a écrit:
Salut à tous
J'ai récupéré ça dans un autre forum...
Il parait que sous oracle ça permet l'ascendence d'un enregistrement (le père et son père et le père du père du père jusqu'au saint père) de récupérer la liste des pères d'une table hiérarchique...
SELECT ... FROM Table CONNECT BY PRIOR Clepere=Cle...
Ca marcherait ça sous SQL Server 2000 ?
Vous ne pouvez même pas immaginer comment ça me rendrait service... :)
@+
LJ
www.eztree-msdn.com
Non, c'est propre à Oracle.
Mais le fature version de SQL Server permettra la récursion des requêtes
via la notion de cycle incluse dans la norme SQL:1999 (alors que la
solution Oracle n'est pas normative, mais spécifique à l'éditeur)...
La syntaxe d'une telle requête sera par exemple :
WITH RECURSIVE trajet (depart, arrivee)
AS (SELECT VLS_DEPART, VLS_ARRIVEE
FROM T_VOLS_VLS
UNION ALL
SELECT debut.depart, suite.VLS_ARRIVEE
FROM trajet debut
INNER JOIN T_VOLS_VLS suite
ON debut.arrive = suite.VLS_DEPART)
SEARCH BREADTH FIRST BY VLS_DEPART, VLS_ARRIVEE
SET etape
CYCLE VLS_DEPART
SET debutCycle '1' DEFAULT '0'
USING traceCycle
SELECT *
FROM trajet
WHERE depart = 'NICE'
AND arrivee = 'BORDEAUX'
ORDER BY etape
Dont un résultat serait par exemple :
depart arrivee debutCycle traceCycle
---------------- ---------------- ----------- ------------------------------------
PARIS MARSEILLE 0 [PARIS]
PARIS LYON 0 [PARIS]
PARIS BORDEAUX 0 [PARIS]
BORDEAUX MARSEILLE 0 [BORDEAUX]
BORDEAUX NICE 0 [BORDEAUX]
NICE LYON 0 [NICE]
BORDEAUX LILLE 0 [BORDEAUX]
PARIS LYON 0 [PARIS, MARSEILLE]
PARIS BORDEAUX 0 [PARIS, MARSEILLE]
PARIS PARIS 1 [PARIS, MARSEILLE]
PARIS LYON 0 [PARIS, BORDEAUX]
PARIS NANTES 0 [PARIS, BORDEAUX]
BORDEAUX LYON 0 [BORDEAUX, MARSEILLE]
BORDEAUX BORDEAUX 1 [BORDEAUX, MARSEILLE]
BORDEAUX PARIS 0 [BORDEAUX, NICE]
NICE NICE 1 [NICE, LYON]
NICE NANTES 0 [NICE, LYON]
MARSEILLE NICE 0 [MARSEILLE, LYON]
MARSEILLE NANTES 0 [MARSEILLE, LYON]
MARSEILLE LILLE 0 [MARSEILLE, BORDEAUX]
LYON LYON 1 [LYON, NICE]
LYON PARIS 0 [LYON, NICE]
NICE MARSEILLE 0 [NICE, PARIS]
...
Mais en attendant, point besoin de tout cela pour dérécursiver un
parcours d'arbre modélisé sous forme SQL.
Il suffit d'utiliser la représentation intervallaire...
A lire :
http://sqlpro.developpez.com/Tree/SQL_tree.html
A +
--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me
contacter par mail a écrit:
Salut à tous
J'ai récupéré ça dans un autre forum...
Il parait que sous oracle ça permet l'ascendence d'un enregistrement (le
père et son père et le père du père du père jusqu'au saint père) de
récupérer la liste des pères d'une table hiérarchique...
SELECT ... FROM Table CONNECT BY PRIOR Clepere=Cle...
Ca marcherait ça sous SQL Server 2000 ?
Vous ne pouvez même pas immaginer comment ça me rendrait service... :)
Mais le fature version de SQL Server permettra la récursion des requêtes via la notion de cycle incluse dans la norme SQL:1999 (alors que la solution Oracle n'est pas normative, mais spécifique à l'éditeur)...
La syntaxe d'une telle requête sera par exemple :
WITH RECURSIVE trajet (depart, arrivee) AS (SELECT VLS_DEPART, VLS_ARRIVEE FROM T_VOLS_VLS UNION ALL SELECT debut.depart, suite.VLS_ARRIVEE FROM trajet debut INNER JOIN T_VOLS_VLS suite ON debut.arrive = suite.VLS_DEPART) SEARCH BREADTH FIRST BY VLS_DEPART, VLS_ARRIVEE SET etape CYCLE VLS_DEPART SET debutCycle '1' DEFAULT '0' USING traceCycle SELECT * FROM trajet WHERE depart = 'NICE' AND arrivee = 'BORDEAUX' ORDER BY etape
Dont un résultat serait par exemple :
depart arrivee debutCycle traceCycle ---------------- ---------------- ----------- ------------------------------------ PARIS MARSEILLE 0 [PARIS] PARIS LYON 0 [PARIS] PARIS BORDEAUX 0 [PARIS] BORDEAUX MARSEILLE 0 [BORDEAUX] BORDEAUX NICE 0 [BORDEAUX] NICE LYON 0 [NICE] BORDEAUX LILLE 0 [BORDEAUX] PARIS LYON 0 [PARIS, MARSEILLE] PARIS BORDEAUX 0 [PARIS, MARSEILLE] PARIS PARIS 1 [PARIS, MARSEILLE] PARIS LYON 0 [PARIS, BORDEAUX] PARIS NANTES 0 [PARIS, BORDEAUX] BORDEAUX LYON 0 [BORDEAUX, MARSEILLE] BORDEAUX BORDEAUX 1 [BORDEAUX, MARSEILLE] BORDEAUX PARIS 0 [BORDEAUX, NICE] NICE NICE 1 [NICE, LYON] NICE NANTES 0 [NICE, LYON] MARSEILLE NICE 0 [MARSEILLE, LYON] MARSEILLE NANTES 0 [MARSEILLE, LYON] MARSEILLE LILLE 0 [MARSEILLE, BORDEAUX] LYON LYON 1 [LYON, NICE] LYON PARIS 0 [LYON, NICE] NICE MARSEILLE 0 [NICE, PARIS] ...
Mais en attendant, point besoin de tout cela pour dérécursiver un parcours d'arbre modélisé sous forme SQL. Il suffit d'utiliser la représentation intervallaire... A lire : http://sqlpro.developpez.com/Tree/SQL_tree.html
A +
-- Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me contacter par mail a écrit:
Salut à tous
J'ai récupéré ça dans un autre forum...
Il parait que sous oracle ça permet l'ascendence d'un enregistrement (le père et son père et le père du père du père jusqu'au saint père) de récupérer la liste des pères d'une table hiérarchique...
SELECT ... FROM Table CONNECT BY PRIOR Clepere=Cle...
Ca marcherait ça sous SQL Server 2000 ?
Vous ne pouvez même pas immaginer comment ça me rendrait service... :)