J'ai besoin d'un peu d'aide pour construire une requête qui me permettra de filtrer les données suivantes.Filtrer les enfants dans une table avec parentid
Table: MyTree
Id ParentId Visible
=====================
1 null 0
2 1 1
3 2 1
4 3 1
5 null 1
6 5 1
Je pense que le résultat suivant de la requête:
Id ParentId Visible
=====================
5 null 1
6 5 1
C'est, tous les enfants du nœud caché ne doivent pas être renvoyés. De plus, la profondeur d'une hiérarchie n'est pas limitée. Maintenant, ne répondez pas "juste mettre 2, 3 & 4 à visible = 0" pour des raisons non-obviuos ce n'est pas possible ... Comme je suis en train de réparer un horrible "système hérité".
Je pensais à quelque chose comme:
SELECT *
FROM MyTree m1
JOIN MyTree m2 ON m1.ParentId = m2.Id
WHERE m1.Visible = 1
AND (m1.ParentId IS NULL OR m2.Id IS NOT NULL)
Désolé pour les erreurs syntaxiques
Mais ce ne filtre que le premier niveau, non? J'espère que vous pouvez aider.
Modifier: Terminé le titre, whoops. Le serveur est un nouveau serveur MSSQL 2008 flambant neuf mais la base de données fonctionne en mode de compatibilité 2000.
Quelle version de SQL Server? –
@JohannesH - Je ne suis pas sûr de comprendre ce que vous essayez d'accomplir. –
La réponse que je pense dépendra plutôt si vous êtes sur SQL Server 2005+ (qui peut faire des CTE récursifs) ou SQL Server 2000 (qui ne peut pas) – AakashM