J'ai du code que j'ai utilisé dans SQL Server pour générer une table de fermeture à partir d'une autre table qui n'a que les relations parent/enfant directes, je peux lancer des requêtes très simples pour déterminer le lignage. Maintenant, je besoin de faire tout cela dans mySQL, mais je ne parviens pas à avec l'interrogation récursive pour générer la table de fermeture ...Table de fermeture transitive mySQL
Ma requête d'origine du serveur SQL est
WHILE @@ROWCOUNT>0
INSERT INTO [ClosureTable] ([Ancestor], [Descendent])
SELECT distinct [Parent],[tc].[Descendent]
FROM
[RelationshipTable]
INNER JOIN [ClosureTable] as tc
ON [Child]COLLATE DATABASE_DEFAULT =
[tc].[Ancestor]COLLATE DATABASE_DEFAULT
LEFT OUTER JOIN [ClosureTable] As tc2
ON [Parent]COLLATE DATABASE_DEFAULT =
[tc2].[Ancestor] COLLATE DATABASE_DEFAULT
AND [tc].[Descendent]COLLATE DATABASE_DEFAULT =
[tc2].[Descendent]COLLATE DATABASE_DEFAULT
Mon premier problème est de trouver une substitution pour @@ ROWCOUNT ... mais peut-être que les requêtes récursives sont complètement différentes dans mySQL? J'ai également vérifié Bill Karwin's presentation
PS. Le "COLLATE DATABASE_DEFAULT" était quelque chose dont j'avais besoin en raison de problèmes de performance ..
Merci.
mise à jour: Merci. Je vais regarder ça encore demain. Pour fatiguer maintenant ... Aussi, je viens de trouver du code sur http://mondrian.pentaho.com/documentation/schema.php#Closure_tables qui est prometteur mais, j'ai des problèmes avec la boucle de répétition. – DougF