Sql server 使用同一列SQL Server的多个联接
我必须从Sql server 使用同一列SQL Server的多个联接,sql-server,join,multiple-columns,Sql Server,Join,Multiple Columns,我必须从GraphNodes中选择id,而相同的id存在于GraphEdges的两列中,即源节点和目标节点。表的结构如下: 图形节点 +---+---------+-------------------+------------+-----------+ | id | Node_ID | Node | Node_Label | Node_Type | +---+---------+-------------------+------------+-----------+
GraphNodes
中选择id
,而相同的id
存在于GraphEdges
的两列中,即源节点
和目标节点
。表的结构如下:
图形节点
+---+---------+-------------------+------------+-----------+
| id | Node_ID | Node | Node_Label | Node_Type |
+---+---------+-------------------+------------+-----------+
| 1 | 677 | Nuno Vasconcelos | Author | 1 |
| 2 | 1359 | Peng Shi | Author | 1 |
| 3 | 6242 | Z. Q. Shi | Author | 1 |
+----+---------+------------------+------------+-----------+
+------------+------------------+-------------+------------------+------+-----------+
|Source_Node | Source_Node_Type | Target_Node | Target_Node_Type | Year | Edge_Type |
+------------+------------------+-------------+------------------+------+-----------+
| 1 | 1 | 10965 | 2 | 2005 | 1 |
| 1 | 1 | 10179 | 2 | 2007 | 1 |
| 1 | 1 | 10965 | 2 | 2007 | 1 |
+------------+------------------+-------------+------------------+------+-----------+
图形边缘
+---+---------+-------------------+------------+-----------+
| id | Node_ID | Node | Node_Label | Node_Type |
+---+---------+-------------------+------------+-----------+
| 1 | 677 | Nuno Vasconcelos | Author | 1 |
| 2 | 1359 | Peng Shi | Author | 1 |
| 3 | 6242 | Z. Q. Shi | Author | 1 |
+----+---------+------------------+------------+-----------+
+------------+------------------+-------------+------------------+------+-----------+
|Source_Node | Source_Node_Type | Target_Node | Target_Node_Type | Year | Edge_Type |
+------------+------------------+-------------+------------------+------+-----------+
| 1 | 1 | 10965 | 2 | 2005 | 1 |
| 1 | 1 | 10179 | 2 | 2007 | 1 |
| 1 | 1 | 10965 | 2 | 2007 | 1 |
+------------+------------------+-------------+------------------+------+-----------+
我只显示了两个表的3行,只是为了了解表的结构。我将查询用作:
SELECT GN.id as Node_ID,
COUNT(DISTINCT(CONCAT(GE.Source_Node, '-', GE.Target_Node)))
AS Mutual_Links -- OR Node_Degree
FROM GraphEdges GE
JOIN GraphNodes GN ON GN.id = GE.Source_Node --How to JOIN this
AND GN.id = GE.Target_Node --How to JOIN this
WHERE (Source_Node IN (SELECT id FROM GraphNodes
WHERE id BETWEEN 1 AND 510)
AND Edge_Type IN (1, 2, 3))
OR (Target_Node IN (SELECT id FROM GraphNodes
WHERE id BETWEEN 1 AND 510)
AND Edge_Type IN (1, 2, 3))
GROUP BY GN.id
我希望以以下形式输出:
+--------+-------------+
|Node_ID | Mutual_Links|
+--------+-------------+
| 1 | 31 |
| 2 | 23 |
| 3 | 12 |
| ... | ... |
+--------+-------------+
问题是如何将
图形
与图形节点
连接起来,我可以获得id
或Node\u id
表单图形节点
并计算图形节点
中不同的相互链接 像这样的怎么样
;with thedata ( id, MutualLinks )
as (Select id, MutualLinks = count(*) from [dbo].[GraphNodes]
inner join [dbo].[GraphEdges] on Source_node = node_id
group by id
union all
Select id, MutualLinks = count(*) from [dbo].[GraphNodes]
inner join [dbo].[GraphEdges] on target_node = node_id
group by id )
Select id, total = sum(MutualLinks)
from thedata
group by id
@CameroFront--无法获取此查询正在执行的操作?但它应该可以工作吗?它将源和目标视为两个独立的结果集,我通过UNION语句将它们合并在一起。我使用公共表表达式(CTE)将它们合并为单个查询结果集,然后将它们相加。在这种情况下,CTE就像一个临时表。@camerfront——它没有给出所需的结果results@Cameront--我们可以聊聊吗?我提出了另一个解决方案,形式是要讨论的查询?好的。如果你愿意的话,你可以把你如何解决这个问题的细节发给我。