부질의는 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