使用 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 的查询
假设我们有一个 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 的查询