计算SQL表

时间:2015-06-19 17:21:40

标签: sql sql-server recursion graph-theory

我在练习时遇到了问题:

Friend

 Friend1     Friend2

Relationship

 Friend1     Friend2      GradeOfFriendship

我需要创建一个触发器,我必须在其中获得对称元组,例如:

Luc    Mark

Mark   Luc

在两个表格中。

如果两个人之间有直接联系,那么GradeOfFriendship = 1

如果一对人之间没有联系,那么GradeOfFriendship = 0

在其他情况下,GradeOfFriendship必须计算为连接这两个人的所有可能路径的最小距离(我们必须将此表视为有向图)

我的问题不是获得对称元组,而是如何计算两个人之间的所有可能路径。例如:

   Luc     Marc 1
   Marc    John 1
   Luc     John 2

我正在使用SQL Server。目前我不知道如何解决这个问题 - 我认为我必须使用一些递归函数,但我不知道如何....

2 个答案:

答案 0 :(得分:1)

这是创建递归煎炸网络的一种方法:

#Yoast sitemap
location ~ ([^/]*)sitemap(.*)\.x(m|s)l$ {
     rewrite ^/sitemap\.xml$ /sitemap_index.xml permanent;
     rewrite ^/([a-z]+)?-?sitemap\.xsl$ /index.php?xsl=$1 last;
     rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
     rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

     ## following lines are options. Needed for wordpress-seo addons
     rewrite ^/news_sitemap\.xml$ /index.php?sitemap=wpseo_news last;
     rewrite ^/locations\.kml$ /index.php?sitemap=wpseo_local_kml last;
     rewrite ^/geo_sitemap\.xml$ /index.php?sitemap=wpseo_local last;
     rewrite ^/video-sitemap\.xsl$ /index.php?xsl=video last;

     access_log off;
}

第一个名为DATA的CTE就在那里,因此不需要将frsh什么两种方式输入到朋友桌中。如果你已经有了这种方式,你可以把它留下来。

第二个称为CTE的CTE是递归的,它从一个人到另一个人获取所有路径。名称以|分隔的路径列当友谊圈出来时,是否可以防止无休止的循环。

最终选择只选择朋友之间的最短路径。

SQL Fiddle

中的示例

答案 1 :(得分:0)

这是朋友和成绩之间的外部联接