서브쿼리 업데이트 문의 0 2 1,332

by 오라클왕따 [Oracle 기초] [2014.06.09 22:51:31]


UPDATE TEST_DB A

   SET A.cnt_num = (select c1 from (SELECT key, COUNT(*) c1 FROM TEST_DB2 B WHERE A.key = B.key GROUP BY B.pnu))

 WHERE EXISTS (SELECT 1 FROM TEST_DB2 B WHERE A.key = B.key);

 

위 쿼리가  토드 10.6.0.42 버전에서는 문제 없이 실행 업데이트가 되는데요. 11.6.0.43 버전에서 실행을 하면

[Error] Execution (16: 83): ORA-00904: "A"."KEY": 부적합한 식별자라는 메시지가 나옵니다.

토드 버전별로 쿼리구문이 다른건가요? 아니면 제가 구문을 잘못 짠건가요? 이렇게 안되면 merge into를 써야하는건지 많은 조언 부탁드립니다~~^^

 

 

by 마농 [2014.06.09 23:37:06]
-- 글쎄요...
-- 원래 메인 조건의 서브 2단계 침투는 안되는 걸로 알고 있습니다.
-- 위 쿼리의 경우 굳이 서브쿼리를 두번 쓸 이유가 없네요.
-- (Group By 항목과 조인키 항목이 다른것은 오타라고 생각하겠습니다.)
UPDATE test_db a
   SET a.cnt_num = (SELECT COUNT(*) FROM test_db2 b WHERE a.key = b.key)
 WHERE EXISTS (SELECT 1 FROM test_db2 b WHERE a.key = b.key)
;

 


by 오라클왕따 [2014.06.09 23:47:39]

감사합니다~ 마농님^^ 서브쿼리를 머하러 두번쓴건지.... 생각이 짧았네요^^; 즐거운 한주 되세요~ 감사합니다~

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