2012-01-11 2 views
1
UPDATE TABLE1 set TABLE1.col1 = TABLE2.col1 
FROM TABLE2 INNER JOIN TABLE3 ON COL2 = TABLE2.COL2 
WHERE TABLE1.COL3 = TABLE3.COL3 

JOIN이 조건 당 여러 행을 반환하면 위 쿼리가 작동합니까? 개별적으로 수락 가능함을 알리기 위해 업데이트 할 수 없습니다. JoinTable3Table2SELECT 문과 내부 조인을 사용하여 업데이트

도와주세요. 정보가 충분하기를 바랍니다.

답변

1

아니요, Table2에서 단 하나의 행만 선택하면됩니다. SQL Server는 Table2에서 적합한 행을 대신 선택합니다.

+0

그렇습니다. 네가 맞습니다. 나는 그것을 확인하고 답변을 정정했다 –

+0

@onedaywhen 참으로! –

+0

@onedaywhen 그래서 교리와 유치원! 8-) 수정 됨. 나는 힙과 클러스터 된 키 조인으로 테스트했다. 힙에서 마지막 값을 선택하는 클러스터 - 임의 –

3

여러 행이있는 경우 임의의 행이 업데이트에 사용됩니다. 오류가 없습니다. 당신은 하나의 행에 의해 반환되는 것을 의무화 할 수 있습니다 2005 년 MERGE는 사용할 수 없습니다 당신이 SQL 서버에있는 것처럼 changing the UPDATE to a MERGE

+0

+1 내 오류를 가리키는 소스가되어 주셔서 감사합니다. –

+1

OP는 2005 년입니다. –

2

로 가입 할 수 있습니다.

결정적 결과를 얻으려면 상관 된 부속 조회가 필요합니다.

UPDATE TABLE1 
SET TABLE1.col1 = ISNULL((SELECT TOP (1) TABLE2.col1 
          FROM TABLE2 
            INNER JOIN TABLE3 
             ON TABLE3.COL2 = TABLE2.COL2 
          WHERE TABLE1.COL3 = TABLE3.COL3 
          ORDER BY TABLE2.col1), TABLE1.col1) 
관련 문제