SQL “arbre de la requête” - la plupart des parents du groupe
J'ai un peu de mal à faire un "arbre de la requête" (que faisons-nous appeler cela?) dans SQL.
Prendre un coup d'oeil à mon schéma ci-dessous (table et les noms de colonne sont en danois - désolé):
DB diagramme http://img197.imageshack.us/img197/8721/44060572.jpg
À l'aide de MSSQL Server 2005, l'objectif est de trouver la plus groupe parent (Gruppe), pour chaque client (Kunde).
Chaque groupe peut avoir de nombreux groupes de parents et de nombreux groupes d'enfants.
Et je voudrais aussi savoir comment faire pour afficher l'arborescence comme ceci:
Client 1 - Parent, groupe 1 - Enfant groupe 1 - ChildChild groupe n - Groupe enfant n - Groupe Parent n - ... - ... Client n - ...
Une autre question:
Comment la requête de chercher à obtenir de TOUS les groupes pour tous les clients? Le Parent et l'enfant groupes.
- Je crois qu'un nom commun pour ce type de données est "hiérarchique" et que vous voulez les meilleurs "ancêtre". Vous pouvez utiliser des requêtes récursives (voir codeproject.com/KB/architecture/RoleBasedSecurity.aspx) pour ce faire.
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas le dire mieux que Joe Celko. Le problème est généralement que les modèles construits ne se prêtent pas bien à établir des hiérarchies, et que ces modèles doivent prendre en considération les caractéristiques de votre hiérarchie. Est-il trop profond? Est-il trop grand? Est-il étroit et peu profond?
Une des clés du succès sur de larges et peu profondes des arbres est d'avoir le chemin complet dans la hiérarchie dans une colonne, comme Celko mentionne dans le premier lien.
Vous pouvez utiliser la CTE est de construire "le chemin d'accès complet de la colonne" à la volée
Les performances pourraient être sous-optimale si vous avez beaucoup de lectures vs rares modifications.
Je suis venu avec une solution qui résout le problème de la liste de TOUS les groupes pour chaque client. Le Parent et l'enfant groupes.
Qu'en pensez-vous?
Comment quelque chose comme cela:
En T-SQL, vous pouvez écrire une boucle while. Non testé:
Nous utilisons SQL Server 2000 et il est un exemple de l'expansion de hiérarchies à l'aide d'une pile dans la documentation en Ligne de SQL, j'ai écrit un certain nombre de variantes pour notre système ERP
http://support.microsoft.com/kb/248915
Je comprends qu'il y a une méthode Native à l'aide de CTE dans SQL 2005 mais je n'ai pas utilisé moi-même