by 최성수 [SQL Query] join update bypass_ujvc [2012.05.02 09:59:25]
select 를 하면 row가 1개가 아닌 몇개가 출력됩니다.
그걸 update 실행해야 하는데 , 아래와 같이 하니
오라클 에러가 뜨네요.
sgl_edi02t 테이블에 있는 confirm_resno 값을 공백으로 처리하고,
confirm_ep_id 를 집어넣기 위해서 select 에서 값을 가져오는 쿼리입니다.
다중 row를 select 해서 update 치는 구문이 없을까요?
아시는 분 힌트 부탁드립니다.
SQL>
update sgl_edi02t a,
(select c.confirm_resno, d.jumin_no, c.confirm_ep_id, d.ep_id as ep_id
from sgl_edi02t c, cdemplt1 d
where c.edi_seq in ('201205020001') and c.confirm_resno = d.jumin_no
) x
set a.confirm_resno = ' ' and a.confirm_ep_id = x.ep_id
where a.edi_seq in ('201205020001') and a.confirm_resno = x.jumin_no
ORA-00971: missing SET keyword
네...감사합니다.. 문법이 틀렸네요..^^;; 그런데 다시 해봐도 같은 오라클 오류가 뜹니다..
아직 원인을 못찾겠네요..;;
SQL>
update /*+ bypass_ujvc */ sgl_edi02t a,
(select c.confirm_resno, d.jumin_no, c.confirm_ep_id, d.ep_id as ep_id
from sgl_edi02t c, cdemplt1 d
where c.edi_seq in ('201205020001') and c.confirm_resno = d.jumin_no
) x
set a.confirm_resno = '' , a.confirm_ep_id = x.ep_id
where a.edi_seq in ('201205020001') and a.confirm_resno = x.jumin_no
ORA-00971: missing SET keyword
-- 1. 서브쿼리 이용 -- UPDATE sgl_edi02t a SET confirm_resno = '' , confirm_ep_id = (SELECT ep_id FROM cdemplt1 WHERE jumin_no = a.confirm_resno) WHERE edi_seq IN ('201205020001') AND EXISTS (SELECT 1 FROM cdemplt1 WHERE jumin_no = a.confirm_resno) ; -- 2. Updatable Join View 이용 -- UPDATE /*+ bypass_ujvc */ ( SELECT c.confirm_resno, c.confirm_ep_id, d.ep_id FROM sgl_edi02t c, cdemplt1 d WHERE c.edi_seq IN ('201205020001') AND c.confirm_resno = d.jumin_no ) SET confirm_resno = '' , confirm_ep_id = ep_id ;
서브쿼리 이용하여 ms-sql 에서 하는 방법은 없나요?
ms-sql에서는
-- 1. 서브쿼리 이용 --
UPDATE sgl_edi02t a
SET confirm_resno = ''
, confirm_ep_id = (SELECT ep_id FROM cdemplt1 WHERE jumin_no = a.confirm_resno)
WHERE edi_seq IN ('201205020001')
AND EXISTS (SELECT 1 FROM cdemplt1 WHERE jumin_no = a.confirm_resno)
;
a.근처의 구문이 잘못되었습니다, WHERE 근처의 구문이 잘못되었습니다.
라고 오류가 나네요.