从表 A 中选择与表 B 中的两列匹配的记录子集
Posted
技术标签:
【中文标题】从表 A 中选择与表 B 中的两列匹配的记录子集【英文标题】:SELECT a subset of records from Table A that match two columns in table B 【发布时间】:2011-08-19 04:02:31 【问题描述】:我在名为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
中选择与ActiveJobs
中Department
/ JobTitle
的组合 匹配的每条记录。我认为这个查询会做到这一点:
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, Joe, Jim, Mack),尽管我希望只是得到 (Joe, Jim, Mack)。
什么查询会得到User
记录的子集,这些记录在Active Jobs
中具有Department
和JobTitle
的匹配组合?
【问题讨论】:
【参考方案1】:在你的连接子句中加入一个“AND”而不是两次连接。
SELECT Users.*
FROM Users
INNER JOIN ActiveJobs DEP
ON Users.Department = DEP.Department AND Users.JobTitle = DEP.JobTitle
【讨论】:
【参考方案2】:似乎两个属性上的一个连接会起作用,而不是一个属性上的两个连接。你能加入...和...吗? (远离电脑)
【讨论】:
以上是关于从表 A 中选择与表 B 中的两列匹配的记录子集的主要内容,如果未能解决你的问题,请参考以下文章