테이블 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_직위;