SSISO Community

시소당

테이블 A와 테이블 B의 같은 이름에 대해서 테이블 A의 직위와 부서명을 업데이트 하라

테이블 A (이름, 주소, 직위, 부서명)

테이블 B (이름, 직위, 부서코드)

테이블 C (부서코드, 부서명)

 

문제) 테이블 A와 테이블 B의 같은 이름에 대해서 테이블 A의 직위와 부서명을 업데이트 하라

 

update A

set       A.부서명 = (select C.부서명

                              from    B, C

                              where A.이름 = B.이름

                              and     B.부서코드 = C.부서코드

                             ),

            A.직위 = ( select B.직위

                            from   B

                            where A.이름 = B.이름

                          )

where  A.이름 = B.이름

 

위와 같이 했는데요...

 

1. "단일행 부속쿼리에 2개 이상의 값을 리턴했습니다.." 에러가 나요...

2. 좀 간단한 쿼리는 없을까요?

 

re: 오라클 update 쿼리 문의드립니다.

 

1.  "단일행 부속쿼리에 2개 이상의 값을 리턴했습니다.."

    --> 서브쿼리로 선언한 부분에서 두개 이상의 행을 반환하는 경우 에러가 발생합니다.

         (구체적으로 무슨 값으로 업데이트해야 할지 SQL 엔진이 판단할 수 없으므로)

    --> 서브쿼리로 선언한 부분을 쿼리하여 하나의 행만 나와야 합니다.

         (서브쿼리 내부에서 DISTINCT 를 쓰거나, 하나의 값만 나오도록 쿼리 조정이 필요합니다.)

 

2. 좀더 간단하게 구현해 보면, in-line view 로 선언하는 방법이 있습니다.

 

    UPDATE (SELECT A.부서명 as A_부서명,

                                C.부서명 as C_부서명,

                                A.직위    as A_직위,

                                B.직위    as B_직위

                       FROM A, B, C

                     WHERE A.이름 = B.이름

                          AND B.부서코드 = C.부서코드)

          SET  A_부서명 = C_부서명,

                  A_직위    = B_직위;

2728 view

4.0 stars