2012-05-25 1 views
1

일대 다 관계를 만들 수 있도록 한 테이블에서 다른 테이블로 키를 추가하려고합니다. 현재 외래 키를 추가하려는 테이블에는 직원의 이름과 성이 있지만 ID는 없습니다. 나는 그들의 이름과 성을 기반으로 ID를 찾기 위해 직원 테이블을 질의하고 부상 테이블에 추가하고 싶습니다.SQL Insert into Exists - 기존 테이블에 외래 키 추가

나는 다음과 같은 오류가 계속 : 내가 참조하고있는 테이블과 열이 더 오타의이 없다, 내가 알고

Insert into dbo.InjuryOLD(dbo.InjuryOLD.EmpID) 
Select dbo.EmployeeInformation.EmpID 
From EmployeeInformation 
Where exists(select dbo.EmployeeInformation.EmpID from dbo.EmployeeInformation 
      where dbo.EmployeeInformation.FirstName = dbo.InjuryOLD.FirstName 
      and dbo.EmployeeInformation.LastName = dbo.InjuryOLD.LastName) 

내가 보장했다 : 아래

The multi-part identifier "InjuryOLD.FirstName" could not be bound. 
The multi-part identifier "dbo.InjuryOLD.LastName" could not be bound. 

는 SQL 문입니다 두 명의 직원이 같은 이름을 가질 수있는 기회가 있음을 의미합니다. 그러나이 시나리오에서는 그렇지 않습니다.

답변

3

은 An INSERT 문이 항상 작동해야 SELECT 부분 자체

그래서 ...

Select dbo.EmployeeInformation.EmpID 
From EmployeeInformation 
Where exists(select dbo.EmployeeInformation.EmpID from dbo.EmployeeInformation 
      where dbo.EmployeeInformation.FirstName = dbo.InjuryOLD.FirstName 
      and dbo.EmployeeInformation.LastName = dbo.InjuryOLD.LastName) 

dbo.InjuryOLD가에서 두 절에서 참조되지 않기 때문에 ... 작동하지 않습니다. 당신은 아마 하위 쿼리 대신 EmployeeInformation

Select dbo.EmployeeInformation.EmpID 
From EmployeeInformation 
Where exists(select 1 from dbo.InjuryOLD 
      where 
       dbo.EmployeeInformation.FirstName = dbo.InjuryOLD.FirstName 
       and dbo.EmployeeInformation.LastName = dbo.InjuryOLD.LastName) 
+0

이 잘 실행하고 오류가 발생하지 않습니다 반복을 존재의 절에서의 dbo.InjuryOLD을 넣어 의미하지만, 나에게 내가 원하는 결과를 제공하지 않습니다. 그것은 아무 값도 반환하지 않았습니다. 그것은 ID의 Injury 테이블을 쿼리하고 있으며 ID에 대한 employee 테이블을 쿼리하려고합니다. 귀하의 명세서에서 "1을 선택하십시오"는 무엇을합니까? 또한 아마도 "존재"는 내가 사용해야 할 명령이 아닙니다. 너는 알게 되니? – talbright

+0

ID에 대한 EmployeeInformation을 쿼리하지만 이름과성에 따라 InjuryOld 테이블에서 일치하는 것을 찾을 수있는 위치 만 포함합니다. WRT'SELECT 1' exists 문에서 [select 절은 무시됩니다] (http://stackoverflow.com/q/1597442), 그래서 나는 항상'SELECT 1'이라고 씁니다. 그래서 생각할 필요가 없습니다. –

+0

당신이 옳았습니다. 직원 표에서 이름과 성을 거꾸로 레이블했기 때문에 아무 결과도 반환하지 않았습니다. 도와 주셔서 감사합니다. – talbright