从表A中选择与表B中的两列匹配的记录子集

时间:2011-08-19 04:02:32

标签: sql sql-server

我有一个名为Users的数据库表中的用户列表(SQL Server 2008 R2)。除了用户UserName之外,还有两个字段可对用户进行分类 - 为简单起见,我们会说DepartmentJobTitle

|  UserName  |  Department  |  JobTitle  |
------------------------------------------
|    Joe     |     IT       |  SysAdmin  |
|    Jim     |     IT       |    DBA     |
|    Jeff    |    Sales     |  SalesMgr  |
|    Mack    |    Sales     |    Rep     |

我还有一个表ActiveJobs,其中列出了我真正关心的DepartmentJobTitle的某些组合。

|  Department  |  JobTitle  |
-----------------------------
|     IT       |  SysAdmin  |
|    Sales     |  SalesMgr  |
|    Sales     |    Rep     |

我想从Users中选择与DepartmentJobTitle / ActiveJobs组合相匹配的每条记录。我以为这个查询会这样做:

SELECT Users.*
FROM Users
INNER JOIN ActiveJobs DEP
ON Users.Department = DEP.Department
INNER JOIN ActiveJobs JOB
ON Users.JobTitle = JOB.JobTitle

但是在许多情况下,这会多次返回相同的User记录(我认为这是由Department列中的重复项引起的 - 但我真的不明白为什么)。对于上面的例子,即使我希望得到(Joe,Jim,Mack),我也会得到(Joe,Joe,Jim,Mack)。

在{{UserDepartment匹配组合JobTitle记录的子集将获得哪些查询1}}?

2 个答案:

答案 0 :(得分:4)

在你的连接子句中加上“AND”而不是连接两次。

SELECT Users.*
FROM Users
INNER JOIN ActiveJobs DEP
ON Users.Department = DEP.Department AND Users.JobTitle = DEP.JobTitle

答案 1 :(得分:1)

似乎两个属性上的一个连接可以工作,而不是每个属性上有两个连接。你能加入......还有......? (远离电脑)