오라클 업데이트 질문드립니다 0 4 1,763

by 이제시작이야 [Oracle 기초] update ora-01427 [2020.04.14 13:24:08]


안녕하세요 요즘 업데이트 관련해서 테스트를 해보고있는 오라클 초심자입니다.

지금 하고있는게

table1                                        table2 

col1         col2          col3             col1         col2

112233     사과          null            112233      과일 

112233     바나나       null            223344      채소

112233     포도          null            

112233     딸기          null            

223344     토마토       null            

223344     당근          null            

223344     오이          null            

위와같은 두테이블의 조건을 비교한후 table1의 col3에 table2의 col2값을 입력하고싶어서,

예)table1의 col1값과 table2의 col1값이 같을경우

update table1 set col3 = (select a.col2 from table2 a,table1 b where a.col1=b.col1);

라는 코드를 실행하면,

ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.라는 오류가 발생하여

고수님들의 조언을 부탁드립니다.

 

by 마농 [2020.04.14 13:35:56]

by 이제시작이야 [2020.04.14 13:43:59]

exists라는 방법이 있었군요.

이미 친절하게 설명을 해주신게 있었네요 좀만더 찾아볼걸그랬네요..

친절한 답변 감사합니다!


by 마농 [2020.04.14 14:12:38]

col1 조건으로 검색하는 것이니 col1 이 유일하면 됩니다.
Update 문을 바로 만들지 마시고
Select 문을 만들어 확인하고 난 후, Update 문으로 변경하는 습관을 들이세요.
 

-- 1. 변경 대상 확인용 쿼리
SELECT a.col1
     , a.col2
     , a.col3
     , (SELECT b.col2 FROM table2 b WHERE b.col1 = a.col1)
  FROM table1 a
 WHERE EXISTS (SELECT 0 FROM table2 b WHERE b.col1 = a.col1)
;
-- 2. 갱신용 쿼리
UPDATE table1 a
   SET a.col3
     = (SELECT b.col2 FROM table2 b WHERE b.col1 = a.col1)
 WHERE EXISTS (SELECT 0 FROM table2 b WHERE b.col1 = a.col1)
;

 


by 이제시작이야 [2020.04.21 17:12:11]

일줄일이 지나서야 확인을했네요;;

update전 select로확인 명심해두겠습니다.

친절한 조언 감사드립니다^^

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