database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 22807 게시물 읽기
No. 22807
한번에 update query 질문입니다.
작성자
김준영(burinake)
작성일
2005-05-27 11:40ⓒ
2005-05-27 11:42ⓜ
조회수
2,533

매출 table
no(key) code sale_price rate
12345678 10000 5800 ?
22345679 20000 7000 ?

상품 table
code(key) price
10000 8000
20000 10000

 

어렵지 않은 query 같은데 잘 않되네요...

매출 테이블과 상품 테이블이 있습니다.
상품이 원가격(price)이 있고 매출테이블의 sale_price가 따로 있습니다.
그래서 얼마에 팔렸는지 rate를 구해서
매출 테이블의 rate을 update 하려고 하는데 어떻게 해야 좋은 쿼리가 나올지 ...
*참고로 건수는 20만건 정도 됩니다.

이 글에 대한 댓글이 총 4건 있습니다.

이렇게 하면될꺼같은데요...

 

update 매출 a
set a.rate = (select a.sale_price / b.price from 상품 b where a.code = b.code)

^^님이 2005-05-27 13:24에 작성한 댓글입니다. Edit

위의 update문이 위와 같은 상황에선 문제가 없겠지만..

상품이 있어야 매출이 발생할테니까..

 

만약 set 절의 서브쿼리에서 해당하는 row가 없으면..

NULL update가 발생합니다..

이 부분에 대해서 항상 조심해야 합니다..

(쓸데없는 걱정인가.. ^^)

 

세가지 해결방법이 나오죠..

1.그룹함수를 써서 NULL일때 처리를 해준다.

2.where 절에 서브쿼리와 같은 내용의 exists내용의 체크서브쿼리를

  넣는다.

3.수정가능조인뷰를 쓴다..

m님이 2005-05-27 13:36에 작성한 댓글입니다. Edit

감사합니다~ 므훗~ 많은 도움이 되었습니다.

김준영(burinake)님이 2005-05-27 15:36에 작성한 댓글입니다.

위 답변중에 where 절에 exists 같이 써주신다는 것은 효율성에 약간에

문제는 있을 수 있겠죠 ...

 

그냥 메인 계산 부분에서 null 이면 updat 대상의 테이블의 값을 넘겨주시면 됩니다.

 

이러한 부분은

 

대용량 데이터베이스 솔루션 1,2 에도 나와 있습니다.

 

권혁봉(disclose)님이 2005-06-03 18:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
22810re-install LSSV(Legato Single Server Version)
강대형
2005-05-27
1154
22809Oracle 9i Rel 2 patchset 9.2.0.5 구합니다. [2]
김효정
2005-05-27
1222
22808exp를 이용한 백업에 대해서 [1]
초조
2005-05-27
2609
22807한번에 update query 질문입니다. [4]
김준영
2005-05-27
2533
22806sga 영역에 대해서 질문 [1]
강강강
2005-05-27
1751
22805TOAD에서 테이블과 데이터 카피 방법 문의 [1]
서정범
2005-05-27
5633
22804리스너 관련 질문 [2]
이문정
2005-05-27
2371
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다