2013-10-30 56 views
1

我正在查詢兩個表並將它們連接在一起以人名命名。我試圖製作所有在過去一個月內沒有填寫表格的員工。我遇到的問題是,當人們列出他們的短名字(喬而不是約瑟夫,或邁克而不是邁克爾)時,我正在接受名稱的重疊。即使使用短名稱,我仍然可以如何生成不重疊的人員列表?SQL加入名稱

這是查詢我截至目前:

SELECT DISTINCT ge.employeeNo, 
(ge.firstName + ' ' + ge.lastName) AS empName, 
ge.email 
FROM dbo.hist_Employees ge 
INNER JOIN dbo.ctrl_Sites cs ON ge.locationID = cs.ID 
WHERE (ge.firstName + ' ' + ge.lastName) NOT IN 
    (SELECT sc.recordedBy 
    FROM GRSTOPS.dbo.hist_StopCard sc 
    INNER JOIN dbo.ctrl_Area a ON sc.area = a.ID 
    INNER JOIN dbo.ctrl_Site s ON a.site = s.ID 
    WHERE sc.recorded BETWEEN '10/01/2013' AND '10/30/2013' 
     AND s.code = 'gre') 
AND cs.Abbreviation = 'gre' 
AND ge.employmentStatus = 1 
AND ge.primaryDept <> 3 
+1

我認爲唯一安全的方法是使用唯一的ID。它可能發生,2人的名字是100%相同的。 –

+1

我同意唯一ID是最好的路線,但由於StopCard表是用戶填寫表格,員工不知道他們的員工ID,所以它不是一個可用的選項。 – user2932503

+0

主鍵用於唯一標識表中的每一行。它可以是實際記錄本身的一部分,也可以是人工字段(除了作爲記錄的標識符之外沒有其他含義)。如何設置主鍵是數據庫設計中的一個重要因素,因爲主鍵的選擇會對整個數據庫的性能,可用性和可擴展性產生重大影響。 – user2615302

回答

0

這將是最好不要加入對人民的名字,因爲他們是不是唯一的。 您應該使用ID/employeeNo等主鍵加入。