데이타 연관성이 있는 데이타와 조인하여 UPDATE 하는 경우가 있다.
즉, 테이블 A와 B를 조인하여 나온 결과를 B의 특정컬럼에 업데이트 하는 경우가 있다.
이때, 프로그램 개발자가 일반적으로 처리하는 방법이 아래와 같은 방법으로 간단하게 프로그램을 작성하여 처리한다.
//특정 테이블 UPDATE StringBuffer sql = new StringBuffer(); sql.append( " SELECT A.NEW_DATA, B.OLD_DATA " ); sql.append( " FROM JOIN_TABLE A, TARGET_TABLE B " ); sql.append( " WHERE A.TABLE_KEY = B.OLD_DATA " ); PreparedStatement pstmt = conn1.prepareStatement(sql.toString()); rs = pstmt.executeQuery(); StringBuffer updateSql = new StringBuffer(); updateSql.append( " UPDATE TARGET_TABLE SET OLD_DATA = ? WHERE OLD_DATA = ? " );
PreparedStatement updatePstmt = null; while(rs.next()) { updatePstmt = conn2.prepareStatement(updateSql.toString()); updatePstmt.setString(1, rs.getString(1)); // A.NEW_DATA updatePstmt.setString(2, rs.getString(2)); // B.OLD_DATA updatePstmt.executeUpdate(); updatePstmt.close(); } rs.close(); pstmt.close(); |
위에서 처리하는 것을 한개의 쿼리로 처리하는 것이 큐브리드에서는 가능하다.
아래와 같이 한번의 쿼리로 처리하면, 처리속도도 어마어마하게 빠르다.
UPDATE TARGET_TABLE B
SET B.OLD_DATA = ( SELECT A.NEW_DATA
FROM JOIN_TABLE A
WHERE A.TABLE_KEY = B.OLD_DATA ) ;