使用 sql 查询进行单模投影

Doing the one mode projection using sql query

假设我们有一个 table 包含:

UserID, ProjectID

这个table在网络分析中有另一种表示,叫做bipartite graph.

我们可以使用 SQL 查询进行高效的 one mode projection 吗?

单模投影示例: 假设 table 是:

UserId, ProjectID
U1, P1
U2, P1
U3, P1
U4, P2
U5, P2
U1, P2

UserId的单模投影为:

U1,U2
U2,U3
U3,U1
U4,U5
U4,U1
U5,U1

同理,ProjectID的单模投影为:

P1,P2

这在 SQL 中称为 join:

select t1.UserId, t2.UserId
from t t1 join
     t t2
     on t1.ProjectId = t2.ProjectId;

注意:如果您有通过多个项目连接的对并且您不想重复,请使用 select distinct

使用以下方法使其运行更快。通过应用 WITH (NOLOCK) 语句,SQL 不使用任何行级锁,响应速度更快。

select t1.UserId, t2.UserId
from t t1 WITH (NOLOCK) join
     t t2 WITH (NOLOCK)
     on t1.ProjectId = t2.ProjectId;

感谢@Gordon Linoff 的查询