별 다른 이야긴 아니지만 늘 까먹을 것 때문에 이렇게 적어놓는 의미도 있네요. 암.
Update dbo.new
set dbo.new.number = (select number from dbo.old where dbo.old.word = dbo.new.word)
from dbo.new
위 구문이 old테이블과 new 테이블에서 특정 컬럼을 비교햐여 매치가 되는 값에 따라 old.number라는 컬럼의 다중 행의 값을 new 의 number라는 컬럼에 싹 넣는 것입니다.
이것이 제대로 된 쿼리인데, 오류를 범했던 것은 다음과 같습니다.
Update dbo.new
set dbo.new.number = (select (select number from dbo.old where dbo.old.word = dbo.new.word ) from dbo.new)
where dbo.new.word = (select (select word from dbo.old where dbo.old.word = dbo.new.word ) from dbo.new)
결국 위와 아래의 구문은 update구문에서 다중행을 처리할 때 한 번에 되게 하려면 form 절을 이중 쿼리 부분에 넣을 것이 아니라 update 쿼리 부분에 넣어야 하는 것입니다.
그렇지 않으면 =, <=, => 등등에 해당하는 에러를 만날 수 있습니다. (다중행이 처리가 안된다며)
위의 것으로 응용해서 해 보시길 바랍니다.
단순하게 생각했을 때는 from 절을 당연히 update칠 number를 뽑아오는 이중 쿼리 부분에 넣어야 되는 줄 알고 있었던 거죠.. :(