I ont une table qui contient des enregistrements qui sont liés de la manière suivante:données dans une table emboîtées de base de données
parent, enfant, petit-enfant.
Je voudrais être en mesure d'exécuter des requêtes pour effectuer les opérations suivantes:
- récupérer tous les enregistrements descendent d'un enregistrement particulier
- récupérer tous les dossiers qui sont directs enfants d'un enregistrement particulier (par exemple seulement les enfants directs)
- récupérer tous les dossiers qui sont petits-enfants d'un enregistrement particulier (ie seulement petits-enfants)
- récupérer le grand-parent d'un dossier
- récupérer le parent d'un enregistrement
- récupérer tous les dossiers (et leurs enfants et petits-enfants)
Je veux que cette requête renvoie les données d'une manière triée, donc je peux créer un document structuré (par exemple XML à partir du résultat de la requête). Par « tri », je veux dire que le jeu de résultats est « Groupés » par un parent THEN enfant, petit-enfant ALORS
J'ai conçu une table simple, comme celui-ci (CODE PSEUDO):
CREATE TABLE family_tree {id integer
, parent_id integer
, child_id integer
, fname varchar(16)
, lname varchar(32) };
J'ai un certain nombre des questions:
(compte tenu des questions que je veux courir [(1) - (6) ci-dessus]) est c'est le meilleur (à savoir la structure de la table la plus efficace que je peux utiliser ?. Si non, qu'est-ce que c'est?
Quelqu'un peut-il m'aider à écrire des instructions SQL ANSI pour effectuer des requêtes (1) - (6) ci-dessus?
id, parentid devrait être sufficiant. Utilisez-vous sql server 2005+? –
recherche SO pour des termes comme « ensemble imbriqué » et « données hiérarchiques » et vous trouverez beaucoup de choses. – markus
Qu'est-ce que la base de données utilisez-vous ? Oracle a des requêtes hiérarchiques (CONNECT BY) – Thilo