아 재차 질문 이거 서브쿼리인데 왜 그룹바이 처럼 되는지..부탁드려요 0 4 2,032

by 김태형 [2008.12.18 23:19:57]


select    *   from    addrbook;

SQL> select  rowid , a.* from addrbook a;

ROWID                          JUMIN                            NAME                 ADDR                          TEL                

AAAHbHAABAAAMZKAAA  111111-2222222   김태형               서울시    010-1111-1111      
AAAHbHAABAAAMZKAAB  333333-4444444   김태희               서울시    010-1111-1111      
AAAHbHAABAAAMZKAAC  111111-2222222   김문선               서울시    011-2222-3333       

=============max값은 김문선씨!

select max(rowid) from addrbook;

MAX(ROWID)        
-------------------
AAAHbHAABAAAMZKAAC

1 rows selected.

==============그래서, 삭제할때 조건을 max값으로 했습니다.

delete   from addrbook a
where   rowid    <     (   select    max(rowid)      from     addrbook b
                                        where   a.jumin   =   b.jumin);

SQL> delete from addrbook a
where rowid < (select max(rowid) from addrbook b
                where a.jumin = b.jumin);

1 rows Deleted.

궁금점은 지금부터 시작됩니다.

rowid 끝이 C보다 작으면 다 삭제가 되어서 2개가 DELETED 될줄 알았는데. 달랑 1개 그것도

제일작은것만 되었고 B는 삭제가 되지 않았습니다.

어떻게 돌아가는건지 감당이 안되네요 ㅎㅎ 갈켜주세요

 

ROWID               JUMIN          NAME                 ADDR                                                  TEL                
AAAHbHAABAAAMZKAAB  333333-4444444 김태희               서울시       010-1111-1111      
AAAHbHAABAAAMZKAAC  111111-2222222 김문선               서울시      011-2222-3333      

by 채용근 [2008.12.19 09:34:58]
delete from addrbook a
where rowid < ( select max(rowid) from addrbook )

by 엉쿰돌이 [2008.12.19 14:26:16]
주민등록번호로 조인이 되어있네요

by 웅 [2008.12.19 15:58:50]
서브쿼리가 먼저 풀리신다고 했는데..정말 그런가요?
실행계획을 올려봐주세요.
대용량에소 나오듯 서브에 메인의 컬럼이 있으면 제공자역할을 못하고 확인자역할을 합니다.

by 호야 [2008.12.19 16:42:14]
웅님 말씀이 맞아용~~~
읽지도 않은 메인테이블의 컬럼을 어떻게 내부에서 먼저 실행이 되낭.ㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입