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

标签 sql sql-server tsql

我有三张 table

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

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

U-id   S-id
1       1
1       2
1       7
2       1
2       6

所以结果会是这样的

UserName1    UserName2   SkillName
A              B            Java

enter image description here

这是我的查询

{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在最后

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

输出

UserName    UserName    SkillName
A           B           Java

现场演示

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

关于SQL查询查找具有相同技能的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49508834/

相关文章:

sql-server - 从字符串转换日期和/或时间时转换失败 - SQL Server 错误

sql - 使用选项创建 View (maxrecursion)

sql - exec(@sql) 的返回值

sql - 如何传递变量内字符串的参数值?

sql - 返回虚拟列的 MySQL 选择?

php - mysql group by date(day) 如果在特定日期没有结果则不显示

PHP 帮助解释一个函数

sql-server - 有哪些选项可以将一个特定 webapp 用户的数据传输到另一个数据库实例而不会遭受 PK 冲突?

sql-server - 如何对数据透视列的值进行求和并将其添加到另一个数据透视列中

sql-server-2008 - 可选地用于 SQL Server 中的 XML