아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
하얀고슴도치236
하얀고슴도치23621.01.12

오라클 DB 다중 UPDATE 문의 드립니다.

오라클 DB 다중 UPDATE 문의 드립니다.

현재 하고싶은 Query 는 아래와 같습니다.

UPDATE TABLE_A

SET

(A,B,C,D) = (SELECT A,B,C,D FROM TABLE_B WHERE PK IN(SELECT PK FROM TABLE_C))

WHERE TABLE_A.PK IN(SELECT PK FROM TABLE_C )

결국 TABLE_A 의 A,B,C,D 칼럼을 서브쿼리 질의한 TABLE_B 의 내용으로 UPDATE 하고싶은것인데요.

서브쿼리한 내용이 1 Row 가 아니다 보니까

"ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다." 에러와 함께 UPDATE 가 되지 않습니다.

서브쿼리를 1개 Row 만 반환되도록 하고 조건문에 따라서 여러번 반복하는 방법도 있겠습니다만...

이러한 꼼수말고 정석으로 저러한 경우 다중 옵션의 UPDATE 문을 하는 방법이 궁금합니다.

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • UPDATE TABLE1 a

    SET a.aValue = (SELECT aValue FROM TABLE2 b WHERE a.Condition = b.Condition and rownum = 1)

    WHERE EXISTS (SELECT * FROM TABLE2 b WHERE a.Condition = b.Condition)

    * rownum = 1 을 넣는 것은 가끔 subquery 의 반환 rows 가 1 임에도 불구하고,

    oracle sql parser 가 1 이상으로 판단해서 쿼리 수행을 안하는 경우가 발생하기 때문에

    쿼리가 수행되도록 하기 위해서 강제수단으로 기입합니다.