답변감사합니다.
subquery 결과가 한건인경우는 실행됩니다.
subquery 결과가 한건 이상인 경우에는
multiple rows in singleton select 에러를 발생시키더군요
delete from a where a.no in ( select b.no from b where b.c1 = 조건 ) ;
으로 하면 실행 됩니다.
다만 데이터 량이 많아서 그런지 속도가 22 초 이상나옵니다.(제 시스템 성능 빵빵하다고 자랑하는데 ㅋ)
b 테이블은 인덱스를 타는데
a 는 풀스켄 하는것 같습니다.
b 테이블은 plan 이 붙여지는데
a 테이블은 in 을 사용해서 그런지 plan 도 안되더군요
a.no 가 프라임키 인데도 인덱스를 타지 않을뿐더러 plan도 사용을 못하겠습니다.
혹 for 문을 사용하라고 아래 글 중에서 읽은것 같은데
for 문을 도통 사용해본 경험이 없어서
여하튼 답변 감사 합니다.
김상면 님이 쓰신 글 :
: 대체로 고급 SQL은 지원하지 못하는 SQL드라이버들이 많습니다.
: 다른문제도 있겠지만 인덱스가 있는지 한번 살펴 보시기 바랍니다.
: 그외에도 여러가지 문제가 있을수 있지만 그래도 문제가 계속 발생한다면....
: 고급SQL은 사용하지 않는게 좋습니다.
: 그럼
: ksd 님이 쓰신 글 :
: : Firebird-2.0.0.12484-0-Win32.exe
: : Firebird_ODBC_1.2.0.69-Win32.exe
: : 를 설치하여 사용중 입니다.
: :
: : delete from a where a.no = ( select b.no from b where b.c1 = 조건 ) ;
: : 와 같은 문장을 사용하고 싶습니다.
: : 형식은 관계없이 b 테이블에서 검색된 자료와 일치하는 a 테이블의 자료를 삭제하고 싶습니다.
: :
: : subquery 결과가 한건인경우는 실행되는것 같은데 여러건의 자료가 검색된경우
: : 여러건의 자료가 검색 되었다는 메세지가 나타납니다.
: :
: : 부탁 드립니다.
: :
: : delete from a where EXISTS ( select * from b where b.c1 = 조건 and b.no = a.no ) ;
: : 이 문장은 실행 됩니다. 다만 시간이 많이 걸리는 군요.
|