使用sql查询执行单模式投影

时间:2016-07-02 13:14:26

标签: sql social-networking projection bipartite

假设我们有一个包含以下内容的表:

UserID, ProjectID

此表在网络分析中有另一种称为bipartite graph.

的表示

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

一种模式投影的示例: 假设该表是:

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

2 个答案:

答案 0 :(得分:2)

这在SQL中称为join

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

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

答案 1 :(得分:1)

使用以下命令使其运行得更快。通过应用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的查询