2013-10-30 5 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와 같은 기본 키를 사용하여 가입해야합니다.