我有一张代表图表的表格:边缘(从,到)。
我想用“路径查询”查询此表,只检索路径的源和目标。
例如,假设我的表包含以下行:
+------+----+
| from | to |
+------+----+
| a | b |
| b | c |
| c | d |
| f | g |
| b | f |
| c | a |
+------+----+
假设我执行以下(伪)查询:
SELECT ?v1, ?v2 WHERE ?v1 to ?t1, ?t1 to ?t2, ?t2 to ?v2;
这意味着我希望所有由4个节点组成的路径中存在的所有源和目标对。执行此查询应返回以下结果:
+-----+-----+
| ?v1 | ?v2 |
+-----+-----+
| a | a |
| a | g |
| a | d |
+-----+-----+
当然,也可能需要由不同数量的节点组成的路径,数字4不是硬编码的: - )
我的问题是:
没有自我边缘(E.G“a - a”)。
没有两个相同的行。
提前致谢!
答案 0 :(得分:2)
ad 1.) 除非您事先知道您的路径将始终具有给定长度(或一小组给定长度),否则您无法在纯SQL中表达您的查询。但是,您可以选择逐步维护图形的传递闭包,特别是
ad 2。)
如果维护一个传递闭包表是一个选项,它应该借给表示路径起点和终点顶点的一对索引。
如果不是,你可能会利用图表的结构:对于与粉丝相比较高(小)的平均粉丝,你应该更好地使用'to'的索引( 'from')专栏。
如果你不能对扇出/扇入比率做出假设,你可能最好用每列的索引。
希望它有所帮助,
最好的问候,carsten