我有一个由A -> B
描述的有向图,意味着存在一个连接,总是权重1,从A到B.我想要解决的问题(这不是一个学术项目)是如何判断的两个节点之间有多少公共连接。
就A和B而言
有两件事需要完成,
*查看我所有的B,链接进来(所有A到某些B)
*计算所有My,Original B,A中的常见A的数量。
我不知道这是否有意义,但我会告诉你我到底有多远 *第一点。
SELECT A
FROM graph
WHERE B='myid';
正如大多数人所知,第1部分是一个非常简单的问题。第2部分是事情变得棘手的地方 我已经能够获得至少1个连接或更多类似的所有A。
第二点。
SELECT G.A, count( G2.A ) AS common
FROM graph AS G2
JOIN (
SELECT A, B
FROM graph
WHERE B = 'myid'
) AS G ON G.A = G2.B
所以第二点是关闭的,因为它将返回所有公共链接,但它不会返回所有没有公共链接的链接。有没有办法得到它?
仍然存在困惑:我试图用文字画出一张照片 这是表格。
A, B
-----
2, 1
3, 1
2, 3
如果我想知道从NODE 1的所有传入链接中有多少常见链接我应该看
A, count
---------
2, 1 // This is for 2's connection to 3.
3, 0
使用当前的SQL语句,我看到了这一点。
A, count
---------
2, 1 // This is for 2's connection to 3.
答案 0 :(得分:0)
我不使用子查询,而只使用JOIN:
SELECT
N1.A,
COUNT(N3.A)
FROM
Nodes N1
INNER JOIN Nodes N2 ON
N2.B = 'myid'
LEFT OUTER JOIN Nodes N3 ON
N3.A = N1.A AND
N3.B = N2.A
WHERE
N1.B = 'myid'
GROUP BY
N1.A
这给出了您在示例中期望的答案。您可能希望在更广泛的样本上进行测试。
如果您的数据集规模很大,您还应该对此进行性能测试。