在SQL中构建网络的最有效方法

时间:2016-03-22 18:41:12

标签: sql loops grouping

我从一个简单的关系列表中解决了建立网络的问题。目前我能理解的唯一方法是使用递归循环......

假设您有一个发件人和收件人ID表,这些表构成了双方之间的关系。该关系总共为n:m,但每个记录只有一个发送者和一个接收者。我们现在需要创建一个网络,确定此列表中的哪些(子)组相互作用,哪些是独立的。因此,我们需要创建“网络”。最小的可能示例如下:

Sender | Receiver | Connection ID
-------+----------+----------------
  A.   |    B.    |      1
  B.   |    C.    |      2
  D.   |    E.    |      3 

预期结果将创建网络1,包括A,B,C,相应的连接1和2以及网络2,包括D和E以及连接3.

当前解决方案是跨同一列表的递归循环。如果有用可以发布SQL但可能更令人困惑。很想知道是否有更优雅的方式。

1 个答案:

答案 0 :(得分:0)

这就是你要找的东西:

- 样本数据:

(defun display-keyboard-mapping (display)
  (declare (type display display))
  (declare (clx-values (simple-array keysym (display-max-keycode keysyms-per-keycode))))
  (setf (display-keysym-mapping display) (keyboard-mapping display)))

- QUERY:

IF OBJECT_ID('tempdb..#Temp1') IS NOT NULL
DROP TABLE #Temp1

CREATE TABLE #Temp1 ( Sender VARCHAR(1), Receiver VARCHAR(1), ConnectionID INT)

INSERT INTO #Temp1
VALUES
('A','B',1), 
('B','C',2), 
('D','E',3)

- 结果:

enter image description here