2017-03-31 3 views
0

저는 SQL 코딩을 처음 접했을뿐 아니라 여전히 복잡한 것을 배우고 있습니다. 내가 조사한 바 있고 내가 뭘 하려는지 (어쩌면 내가 적절한 키워드를 놓치고있는)와 관련된 예제를 찾을 수 없었다.SQL Server에 관련된 세 번째 테이블로 쿼리를 업데이트하십시오. 2016

나는 SQL 서버 2016에서 세 개의 테이블이 (직원 테이블 - E1, 직원 데이터를 가져온 테이블 - ED1 및 부서 테이블 - D1) ...이 질문에 대한 적절한 구조는 다음과 같습니다에

E1 DB1은 DBO의 스키마와 DB2의 열

U_SysID - Identity, 
UserID - VARCHAR, 
FirstName - VARCHAR, 
LastName - VARCHAR, 
DepartmentID - VARCHAR 

에게 ED1를 포함는 DB1의 열

UserID - VARCHAR, 
FirstName - VARCHAR, 
LastName - VARCHAR, 
DepartmentName - VARCHAR 

D1은 열

를 포함 포함

USE DB1 
GO 

UPDATE E1 
SET DepartmentID = (SELECT DepartmentID 
        FROM D1 
        WHERE E1.UserID IN (SELECT UserID 
             FROM DB2.dbo.ED1) 
         AND D1.DepartmentName IN (SELECT DepartmentName 
               FROM ED1) 
         AND E1.UserID = DB2.dbo.ED1.UserID) 

내 문제는 마지막 라인 :

DepartmentID - Identity and 
DepartmentName - VARCHAR 

코드 나는 이것이 달성하려고 함께했다. "DB2.dbo.ED1.UserID"는 다중 부분 식별자를 바인드 할 수 없습니다. 메시지를 생성합니다. 오타가없고 위의 select 문에서 해당 데이터베이스 참조를 사용할 때 아무런 문제가 없지만 마지막 줄을 제거하면 하위 쿼리가 두 개 이상의 값을 반환했다는 메시지가 나타납니다.

이 글을 읽고 제안하는 데 많은 시간을 할애 해 주시면 감사하겠습니다.

내가이 게시물을 올바르게 공식화하지 않았다면 사전에 사과해야합니다.

+0

모든 하위 쿼리 대신 조인을 사용해야합니다. 그리고이 글을 쓰는 동안 1 개 이상의 가치가 반환 될 수 있으므로주의하십시오. –

+0

이 설명에 감사드립니다. –

답변

1

이렇게하면 필요한 작업을 수행 할 수 있습니다. 그러나 DepartmentNames, Missing Users 등이 누락되었거나 철자가 틀린 지 확인해야합니다.

USE DB1 
GO 

UPDATE E1 
SET DepartmentID = D1.DepartmentID 
FROM E1 
INNER JOIN DB2.dbo.ED1 ED1 
    ON E1.UserID = ED1.UserID 
INNER JOIN D1 
    ON ED1.DepartmentName = D1.DepartmentName 
+0

고맙습니다. 나는 이것을 시험해 보겠습니다. –

+0

최고 굉장합니다. 이것은 훌륭하게 작동했습니다. –