table récursivement jointe à elle-même
Bonjour,
j'ai un petit problème à vous soumettre. Soit un ensemble E d'objet représentés de façon biunivoque par des entiers, tels que chaque objet a un parent au plus ; les parents font eux-mêmes partie de E. On représente dans une table nommée 'Objets' à deux colonnes (id | parent_id) les liens de filiation entre les objets. L'objet numéroté id a comme objet parent celui représenté par parent_id. Ma question : comment récupérer, pour chaque objet, la suite d'entiers représentant ses 'aïeux' ?
J'ai une solution 'finie', en se disant, par exemple, qu'un objet n'a au plus que 2 aïeux :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
-- réplique de la table Objets
CREATE TEMPORARY VIEW objets1 AS
SELECT id AS parent1, parent_id AS parent_parent1
FROM Objets;
-- réplique de la table Objets
CREATE TEMPORARY VIEW objets2 AS
SELECT id AS parent1, parent_id AS parent_parent2
FROM Objets;
SELECT id, parent1, parent2
FROM
Objets,
objets1,
objets2
WHERE
Objets.parent_id = objets1.parent1 AND
objets1.parent_parent1 = objets2.parent2; |
Mais je me demande s'il y a plus malin et plus 'générique'... Quelqu'un aurait une idée ? Y a-t-il des fonctions "search" ou "find" qu'on puisse utiliser ? Je ne sais pas trop comment mieux prendre le problème, ne maîtrisant pas bien PostgreSQL...
Merci pour votre aide !