我们有一个联赛表,现在想要能够推出联赛(当联赛结束时,从一开始就重新开始)。建议的解决方案是只向表中添加RolloverLeagueID:
我的问题是,我们不可避免地要报道。你会如何展示一个联盟的完整历史?
SELECT
*
FROM
League AS L1
LEFT OUTER JOIN League AS L2
ON L1.Id = L2.Id
LEFT OUTER JOIN League AS L3
etc etc
这显然不实用。有没有办法以递归方式查询这些信息?
我倾向于添加另一张这样的表:
使用复合键,RolloverChainId沿着链保持不变。然后按照日期,Id或其他顺序返回所有具有RolloverChainId的联赛。
是否有更好的方法来链接ID链?
答案 0 :(得分:1)
SQL Server可以recursive queries,并且有各种方法可以建模链接列表,但您真的需要吗?你能采取不同的方法,并拥有一个联盟定义表,其中包含不变的详细信息(即联赛名称),然后是一个联赛实例表,其中包含联盟每个实例的详细信息(即开始和结束日期)。
答案 1 :(得分:1)
这是SQL的典型问题。 Oracle有一个干净利落的功能 - 自从我使用Oracle以来已经很长时间了,我不记得细节,但它就在那里。
SQL扩展失败,您可以使用sproc或代码执行此操作,只是单个查询无法执行此操作。编写一个循环可以再次调用查询,插入上一次运行的值很容易。您可以使用sproc来实现它,因此如果性能问题,它不会多次访问数据库引擎。