2014-02-21 7 views
3

을 기반으로 한 T-SQL 업데이트 하위 쿼리가 업데이트 된 셀의 일부 키 기반 값을 기반으로 값을 반환해야하는 하위 쿼리로 업데이트하는 데 문제가 있습니다.하위 쿼리

╔══════════════════════════════╗ 
║ Key1 Key2 Value Other ║ 
╠══════════════════════════════╣ 
║ Key11 Key21 Val1 Other1 ║ 
║ Key12 Key22 Val2 Other2 ║ 
║ Key13 Key23 Val3 Other3 ║ 
║ Key14 Key24 Val4 Other4 ║ 
╚══════════════════════════════╝ 

을 그리고 내가 좋아하는 일을하고 싶습니다 : 보통은 다음과 같이 테이블과 일하게 될 것입니다

UPDATE Table T1 
SET T1.Value = (SELECT T2.Other 
       FROM Table T2 
       WHERE T2.Key2 IN ("SOME CONSTRAINT")) 
WHERE T1.Key1 = T2.Key2 

나는이 작동하지 않을 수 있습니다 알고 있습니다. 외부 where 절은 T2.Key2을 볼 수 없습니다.

다른 경우는 다른 테이블을 기반으로 한 테이블을 업데이트합니다.

Table1 내가 WHERE 하위 쿼리에서 키를 볼 수 없습니다 다시 한번 외부

UPDATE Table1 T1 
SET T1.Value = (SELECT T2.Value 
       FROM Table2 T2 
       WHERE "SOME CONDITION") 
WHERE T1.Key = T2.OtherKey 

같은 것을하고 싶어 다시

╔═════════════════╗ 
║ Key Value ║ 
╠═════════════════╣ 
║ Key1 Val1  ║ 
║ Key2 Val2  ║ 
║ Key3 Val3  ║ 
║ Key4 Val4  ║ 
╚═════════════════╝ 

그리고 Table2

╔══════════════════════╗ 
║ OtherKey OtherValue ║ 
╠══════════════════════╣ 
║ Key1  Val1  ║ 
║ Key2  Val2  ║ 
║ Key3  Val3  ║ 
║ Key4  Val4  ║ 
╚══════════════════════╝ 

이다 말 . 만약 내가 외부 WHERE 두 경우 모두없이 내가 할 하위 쿼리를 허용하지 않는 하나 이상의 값을 반환 오류.

이것은 UPDATE 대신 INSERT 대신에 WHERE을 사용하면 실제로 루프 또는 커서를 사용하여 업데이트 할 수 있습니다.

업데이트 할 테이블에 행이 있고 업데이트 된 열을 기반으로 "값"을 할당하려는 것과 같이 값 쌍이 많은 (키, 값)과 같은 결과 집합이있는 경우 상황의 바리에이션의 개요가됩니다. "키"를 설정하고 행의 일부 키를 업데이트합니다.

UPDATE Table 
SET Value = Other 
WHERE Key2 IN ("SOME CONSTRAINT") 
AND Key1 = Key2 

그리고 : 서브 쿼리가 필요한 이유

+0

당신이'JOIN'와 함께'UPDATE'를 사용하여 봤어? – TTeeple

+0

이것은 경험이 거의없는 개발자가 SQL 쿼리를 작성하는 일반적인 방법입니다. 이들은 데이터 세트를 쿼리로 작성하고 '서로 붙이기'를 시도하지만 더 깨끗한 구문과 의미로 동일한 결과를 얻을 수있는 경우가 많습니다. –

답변

1

당신은 첫 번째 경우에 다음 구문

update table1 
set whatever 
from table1 join table2 on something 
join (subquery goes here) temp on something 
9

을 사용할 수 있습니다, 나는처럼 동일하지 않을 것이라고 표시되지 않습니다 UPDATE초는 함께 할 수 JOIN A :

UPDATE T1 
SET T1.Value = T2.Value 
FROM Table1 T1 
INNER JOIN Table2 T2 
    ON T1.Key = T2.OtherKey 
+0

사실 실제 사례는 좀 더 복잡해졌으며 간단한 그림을 만들려고했습니다. 아직도 고마워, 업데이 트에 조인을 고려하지 않았다. 또한 WITH (대문자 사용법)을 사용하여 WITH 또는 유사한 구문을 사용할 수 있으므로 하위 쿼리를 통해 사용할 가치와 일치하는 키를 얻을 수 있습니까? – user1493545