FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[3549] Re:Re:Re:delete
까막.윤창희 [ggamagui] 2600 읽음    2010-09-07 21:50
ksd 님이 쓰신 글 :
: 답변감사합니다.
: 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 ) ;
: : : 이 문장은 실행 됩니다. 다만 시간이 많이 걸리는 군요.

안녕하세요. 까막입니다.

애초에 문의하신 쿼리문 자체가 단 하나의 조건값으로만 삭제를 하기 위한 쿼리 구문입니다.
당연히 Sub Query 에서 여러건의 Row 를 반환 한다면 Multiple... 오류가 나는 거죠.
조건값이 여러개가 되는 셈이니까요.

또한  IN,  EXISTS 는 오류가 안나는게 여러 건의 조건값에 대해 처리를 하기 위해 쓰는 쿼리 구문이니까요.

for 문 사용 예제.
CREATE OR ALTER PROCEDURE Test_SP
AS
  DECLARE VARIABLE vNo   CHAR(04);
begin
  for
    SELECT No
    FROM   B
    WHERE  C1 = '0000'
    INTO  :vNo
  do
  begin
    DELETE FROM A
    WHERE  NO = :vNo;
  end

  suspend;
end


대략 이렇게 사용하시면 됩니다.
질문이 시간이 꽤 지난지라 질문하신 분에게는 큰 도움이 안되시겠지만...



                                                                                      혼이 살아 있을까.... 대한민국.

+ -

관련 글 리스트
3538 delete ksd 2414 2010/08/26
3554     Re:delete 아폴론 2403 2010/09/16
3539     Re:delete 김상면 2327 2010/08/27
3540         Re:Re:delete ksd 2758 2010/08/27
3549             Re:Re:Re:delete 까막.윤창희 2600 2010/09/07
3550                 답변 감사드립니다. ksd 2329 2010/09/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.