Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 链接ID链(自引用表)_Sql_Database Design_Sql Server 2012 - Fatal编程技术网

Sql 链接ID链(自引用表)

Sql 链接ID链(自引用表),sql,database-design,sql-server-2012,Sql,Database Design,Sql Server 2012,我们有一个联赛排名表,现在需要滚动联赛的能力(当一个联赛结束时,重新开始)。建议的解决方案只是在表中添加一个滚动联盟ID: 联盟 其他栏目 滚动联盟 我在这里的问题是,我们什么时候不可避免地要进行报道。你如何展示一个联赛的全部历史 SELECT * FROM League AS L1 LEFT OUTER JOIN League AS L2 ON L1.Id = L2.Id LEFT OUTER JOIN League AS L3 et

我们有一个联赛排名表,现在需要滚动联赛的能力(当一个联赛结束时,重新开始)。建议的解决方案只是在表中添加一个滚动联盟ID:

  • 联盟
  • 其他栏目
  • 滚动联盟
我在这里的问题是,我们什么时候不可避免地要进行报道。你如何展示一个联赛的全部历史

SELECT
    *
FROM
    League AS L1
    LEFT OUTER JOIN League AS L2
        ON L1.Id = L2.Id
    LEFT OUTER JOIN League AS L3
    etc etc
这显然是不现实的。有什么方法可以递归地查询这些信息吗

我倾向于添加另一个表,如下所示:

  • 滚动链ID
  • 以前的联盟
  • 纽莱盖德
具有复合关键点,其中RolloverChainId沿链持续存在。然后按照日期、Id或其他顺序返回所有联盟的滚动链Id


有没有更好的链接ID链的方法?

SQL Server可以这样做,并且有多种方法可以对链接列表进行建模,但您真的需要这样做吗?您是否可以采用不同的方法,创建一个包含恒定细节(即联赛名称)的联赛定义表,然后创建一个包含联赛每个实例细节(即开始和结束日期)的联赛实例表。

这是SQL的一个典型问题。甲骨文有一个功能可以做到一目了然——我已经很久没有使用甲骨文了,我不记得细节了,但它已经存在了

如果SQL扩展失败,您可以通过存储过程或代码来实现,但不能通过单个查询来实现。编写一个循环,继续再次调用查询,插入上一次运行的值,这非常容易。您可以通过存储过程来完成,这样,如果性能有问题,就不会多次访问数据库引擎