【发布时间】:2010-11-22 04:57:57
【问题描述】:
我在 SQL Server 中使用了一些代码,用于从另一个只有直接父/子关系的表生成一个闭包表,我可以对此运行非常简单的查询来确定沿袭。现在我需要在 mySQL 中完成所有这些操作,但是我无法通过递归查询来生成闭包表...
我原来的 SQL 服务器查询是
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
我的第一个问题是找到@@ROWCOUNT 的替代品...但也许递归查询在 mySQL 中完全不同?我还查看了Bill Karwin's presentation
PS。由于性能问题,我需要“COLLATE DATABASE_DEFAULT”。
谢谢。
【问题讨论】:
标签: mysql closures recursive-query transitive-closure-table