2011-08-19 98 views
-2

我有一個名爲Users(SQL Server 2008 R2)的數據庫表中的用戶列表。除了用戶的UserName之外,還有兩個字段用於對用戶進行分類 - 爲簡單起見,我們將說DepartmentJobTitle從表A中選擇匹配表B中兩列的記錄子集

| 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選擇每個記錄中的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記錄具有匹配組合DepartmentActive JobsJobTitle

回答

4

將「AND」放入連接子句中,而不是連接兩次。

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

看起來像兩個屬性上的一個連接會起作用,而不是每個屬性上的兩個連接。你可以加入...並且...? (遠離計算機)

相關問題