我有一个名为Users
的数据库表中的用户列表(SQL Server 2008 R2)。除了用户UserName
之外,还有两个字段可对用户进行分类 - 为简单起见,我们会说Department
和JobTitle
。
| UserName | Department | JobTitle |
------------------------------------------
| Joe | IT | SysAdmin |
| Jim | IT | DBA |
| Jeff | Sales | SalesMgr |
| Mack | Sales | Rep |
我还有一个表ActiveJobs
,其中列出了我真正关心的Department
和JobTitle
的某些组合。
| Department | JobTitle |
-----------------------------
| IT | SysAdmin |
| Sales | SalesMgr |
| Sales | Rep |
我想从Users
中选择与Department
中JobTitle
/ 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)。
在{{User
和Department
匹配组合的JobTitle
记录的子集将获得哪些查询1}}?
答案 0 :(得分:4)
在你的连接子句中加上“AND”而不是连接两次。
SELECT Users.*
FROM Users
INNER JOIN ActiveJobs DEP
ON Users.Department = DEP.Department AND Users.JobTitle = DEP.JobTitle
答案 1 :(得分:1)
似乎两个属性上的一个连接可以工作,而不是每个属性上有两个连接。你能加入......还有......? (远离电脑)