SQL查询查找具有相同技能的用户

PTT*_*TTT 5 sql t-sql sql-server

我有三张桌子

  1. 用户信息(U-id、U-name)
  2. Skill(S-id,S-Name) 以及它们之间的桥接表(因为它们具有多对多关系)
  3. 用户技能(U-id,S-id)

我想编写一个查询来查找具有相同技能的用户,例如这是 UserSkill 表中的示例数据

U-id   S-id
1       1
1       2
1       7
2       1
2       6
Run Code Online (Sandbox Code Playgroud)

所以结果会是这样的

UserName1    UserName2   SkillName
A              B            Java
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我的查询

{select ui.UserName,ui2.UserName,SkillName
  from 
  UserSkill us1 inner join UserSkill us2 
on us1.SkillID = us2.SkillID and us1.UserID <> us2.UserID
  inner join UsersINFO UI 
on ui.UserID = us1.UserID 
  inner join UsersINFO ui2 
on ui2.UserID = us2.UserID
  inner join Skill s 
on s.SkillID = us2.SkillID}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人知道更好的编写查询的方法

Jay*_*pta 3

Where ui.UserName<ui2.UserName你只需要在最后添加

select ui.UserName,ui2.UserName,SkillName
  from 
  UserSkill us1 inner join UserSkill us2 
on us1.SkillID = us2.SkillID and us1.UserID <> us2.UserID
  inner join UsersINFO UI 
on ui.UserID = us1.UserID 
  inner join UsersINFO ui2 
on ui2.UserID = us2.UserID
  inner join Skill s 
on s.SkillID = us2.SkillID
Where ui.UserName<ui2.UserName
Run Code Online (Sandbox Code Playgroud)

输出

UserName    UserName    SkillName
A           B           Java
Run Code Online (Sandbox Code Playgroud)

现场演示

http://sqlfiddle.com/#!18/64540/1