바코드 명이 같은
SURVEY_PROD 라는 테이블에 있는 정보를
SURVEY_HIS에 덮어씌워 주는 쿼리인데요.
String sql = " update survey_his " + " set " + " dept_id = (select dept_id from survey_prod where survey_his.dept_id = survey_prod.dept_id) , " + " LOCA_ID = (select LOCA_ID from survey_prod where survey_his.LOCA_ID = survey_prod.LOCA_ID) , " + " EMP_ID = (select EMP_ID from survey_prod where survey_his.EMP_ID = survey_prod.EMP_ID) , " + " PROD_STATUS_FLG = (select PROD_STATUS_FLG from survey_prod where survey_his.PROD_STATUS_FLG = survey_prod.PROD_STATUS_FLG) " + " where survey_his.prod_Barcode = ? " + "";
이 쿼리는 잘 돌아갑니다.
그런데
하나하나 바코드로 읽어오지 않고 부서 아이디로 업데이트 하기 위해서
String sql = " update survey_his " + " set " + " dept_id = (select dept_id from survey_prod where survey_his.dept_id = survey_prod.dept_id) , " + " LOCA_ID = (select LOCA_ID from survey_prod where survey_his.LOCA_ID = survey_prod.LOCA_ID) , " + " EMP_ID = (select EMP_ID from survey_prod where survey_his.EMP_ID = survey_prod.EMP_ID) , " + " PROD_STATUS_FLG = (select PROD_STATUS_FLG from survey_prod where survey_his.PROD_STATUS_FLG = survey_prod.PROD_STATUS_FLG) " + " where survey_his.dept_id = ? ";
이런 식으로 작성하면 돌지 않네요...
어떤 식으로 변경해야 하는지 도움 요청드립니다.
기존 쿼리의 문제점.
- dept_id 가 같은 자료의 dept_id 를 찾아 dept_id 에 dept_id 를 갱신
- 같은 자료로 갱신하고 있으므로, 결론은 아무런 변화 없음
- 무의미한 처리임.
변경 쿼리의 문제점.
- 조건만 다를 뿐 서브쿼리는 동일함
- 변경 쿼리에 문제가 있는게 아니라 원본 쿼리가 원래 문제가 있음.
- 변경 대상 데이터에 따라 문제가 발생하기도 하고 아니기도 한 것임.
- 문제는 서브쿼리에서 2개 행 이상 조회되었을 가능성 있음.
결론은
- 애초부터 이상한 쿼리였음
- 개념 설계를 다시해서 쿼리 새로 작성해야 할 듯
- 서브쿼리의 조건이 각각의 컬럼 조건이 아닌, 테이블의 PK 조건으로 주는게 맞을 듯.