La récursivité dans SQL avant SQL 2003 (c'est-à-dire SQL Server 2000) est plutôt moche; Pour chaque niveau de votre arbre, vous devez écrire une déclaration de jointure séparée sur la table d'origine. Pourvu que le nombre de niveaux dans votre hiérarchie soit fixe, vous pouvez écrire quelque chose comme ceci.
create table #Hell (
parent int,
id int,
name varchar(30)
)
insert into #Hell values (NULL, 1, 'The Boss')
insert into #Hell values (1, 2, 'The Boss'' PA')
insert into #Hell values (1, 3, 'Production Director')
insert into #Hell values (3, 4, 'Jim''l Fixit')
select * from #Hell H1
inner join #Hell H2
ON H1.id=H2.parent
inner join #Hell H3
ON H2.id=H3.parent
WHERE H3.Id=4 --Find the boss for Jim
drop table #Hell
Heureusement SQL Server 2005 a une avec expression de table commune qui permet aux opérations récursives à écrire assez facilement. Voir Voir http://www.4guysfromrolla.com/webtech/071906-1.shtml
Vous devez également être au courant des diverses façons de représenter des arbres dans une base de données. Jetez un oeil sur les diapositives sur les arbres dans SQL de cette présentation http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
Cet opérateur "with" s'appelle en réalité "Common Table Expression" (CTE) et n'est pas une extension spécifique à SQL Server, mais fait partie de la norme SQL: 2003. –
Merci pour une raison quelconque, je pensais que c'était un truc de Microsoft mais en regardant autour de Postgres prend également en charge les CTE en utilisant WITH RECURSIVE. – pjp