[mssql] 상관 부질의를 이용한 업데이트 문

부질의는 sql문안에 또하나의 sql문이 있다는걸 말한다.
상관 부질의는 그 또 하나의 sql문이 그 자체로 실행되면 에러가 나는 경우를 말한다.
업데이트 되는 필드에는 여러값이 들어갈수 없다.

위의 조건들을 염두에 두고 다음의 경우를 생각해보자.
titles 테이블에서 ytd_sales 라는 연간 총판매량을 입력하는 컬럼이 있다.
이 칼럼에 94년에 판매된 모든 수량을 업데이트 하고 싶으면
아래와 같이 생각할수 있다.

update titles
set ytd_sales = ytd_sales + (
select qty
from sales
where sales.title_id = titles.title_id
and ord_date between ’1/1/94′ and ’12/31/94′
)

그러나 위와 같이 하면 에러가 난다. 이유는 업데이트될 필드는 여러값이 들어 갈수 없기 때문이다.
그러면 어떻게 해야 하나

update titles
set ytd_sales = (
select sum(qty)
from sales
where sales.title_id = titles.title_id
and ord_date between ’1/1/94′ and ’12/31/94′
)

이렇게 하면 해당하는 제목에 대한 sales테이블의 수량을 모두 더하가 그 더한값을 한번만 해당하는 titles의 해당행에 더하므로 한행에 대해서는 한번만 update가 되는 것이다.

Comments

Powered by Facebook Comments

댓글 남기기

당신의 이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

*

다음의 HTML 태그와 속성을 사용할 수 있습니다: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>