같은 조건에 부함하는 데이터 중 한건만 수정(update)하고 싶은 경우... 0 2 2,681

by 김태원 [SQL Query] update 부분수정 [2015.03.20 16:53:43]


제목 그대로입니다.

WHERE 조건을 주면 여러 건의 데이터가 나옵니다.

결과셋은 다 같은 내용인데, SEQ부분만 다릅니다.

SEQ로 정렬해서 최상위의 데이터 1건만 UPDATE을 해주고 싶습니다.

... 방법이 떠오르지 않아요... ㅠ.ㅜ;;

나름 이것저것 별의별 짓거리 다 해보고 있는데... ROWID를 잘 사용하면 될것 같기는 한데;;

가르침 부탁드리겠습니다... __)

 

혹 이게 안된다면... TABLE 구조 자체를 바꾸어야겠지요?

by 창조의날개 [2015.03.20 17:05:14]

UPDATE TABLE
SET AAA=1234
WHERE SEQ = ( SELECT MAX(SEQ) FROM TABLE WHERE ....)
;

 


by 겸댕2후니 [2015.03.23 18:01:08]
(1) col1 + seq로 인덱스가 존재하는 경우 (idx_col1_seq) 
UPDATE TEST SET col2 = 'XXX'
WHERE rowid = (select /*+ index_desc(t idx_col1_seq) */ rowid
from TEST t
where col1 = 2
and rownum = 1)

또 인덱스가 없는경우에는 

UPDATE TEST SET col2 = 'XXX'
WHERE col1 = 2 and seq = (select MAX(seq)
from TEST t
where col1 = 2) 
이렇게 되야겠네요.
너무 비효율적인거 같네요.
더 좋은 방법 찾아보도록 하겠습니다.







 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입