팁으로 나온 쿼리인데 이해가 안가서 .. 쿼리 설명좀 부탁드립니다. 0 3 2,153

by 프리어 [SQL Query] [2011.11.04 23:08:09]



DELETE 
FROM
emp a
WHERE 
ROWID
> (SELECT MIN(ROWID)
    FROM emp b
    WHERE b.empno = a.empno);


위의 쿼리인데요.. 저게 중복된 데이터를 제거 하는거라고 하는데 이해가 안가네요..

어떤식으로 동작하길래.. rowid>(select min(rowid)....)이런식으로 하면 특정한 row의 rowid보다 큰값들은
전부 삭제되는거 아니에요? 테스트 해보니까 정말 중복된 데이터만 삭제되던데..
어떻게 삭제되는지 동작 과정좀 알려주시면 정말 감사하겠습니다.ㅠㅠ
by 현 [2011.11.05 11:48:25]
MIN(ROWID) 에서 가장 작은 rowid가 나오잔아요...
그거 보다 큰 것들을 지우는 거니까 가장 작은 rowid만 남고 다 지워지겠죠...

by 프리어 [2011.11.05 12:29:50]
그럼 예를 들어서 empno가 1111인 중복된 레코드가 있다고 하면 우선 1111인 레코드들중에 한개의 레코드를 제외한 나머지를 삭제하고 다른 empno에 해당하는 레코드를도 같은 식으로 순차적으로 처리된다고 이해하면 되나요?

by 이재현 [2011.11.05 14:03:17]
그렇죠 우선 메인 테이블( EMP ) 읽어서 한건을 서브 쿼리에다가 주고 그럼 서브쿼

리는 EMPNO 마다 1건을 확인하죠 그래서 위 쿼를 확인자 서브쿼리( 서브 쿼리만 )

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