从表 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 之外,还有两个字段可以对用户进行分类 - 为简单起见,我们会说 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 中选择与ActiveJobsDepartment / 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 中具有DepartmentJobTitle 的匹配组合

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

似乎两个属性上的一个连接会起作用,而不是一个属性上的两个连接。你能加入...和...吗? (远离电脑)

【讨论】:

以上是关于从表 A 中选择与表 B 中的两列匹配的记录子集的主要内容,如果未能解决你的问题,请参考以下文章

oracle两表中的两列进行模糊匹配的方法

在总和匹配的两组整数中查找子集的算法

PL/SQL - 如何从连接表中返回单行

比较两列中的数据并相互匹配数字

SWIFT - Coredata删除关系记录

wps怎么筛选出两列中完全相同的数据?