2010-06-04 2 views
4

나는 완전히이 쿼리의 결과에 당황 해요 :Oracle EXISTS 쿼리가 예상대로 작동하지 않습니다. - DB Link bug?

select count(*) from my_tab mt 
where mt.stat = '2473' 
    and mt.name= 'Tom' 
    and exists (select * from [email protected] cu, 
       [email protected] pr 
       where cu.user_id = pr.user_id 
       and mt.name = pr.name 
       and mt.stat = cu.stat 
      ) 

반환 값 :이 = '2473'를 통계에 [email protected] 0 기록, 그래서 왜 반환 한

존재에 대한 진실? 그래서, 그것은 0을 반환처럼 쿼리를 변경하는 경우

는 :

select count(*) from my_tab mt 
where mt.stat = '2473' 
    and mt.name= 'Tom' 
    and exists (select * from [email protected] cu, 
       [email protected] pr 
       where cu.user_id = pr.user_id 
       and mt.name = pr.name 
       and cu.stat = '2473' 
      ) 

UPDATE를가 좋아, 이건 정말 이상해. 무슨 일이 일어날 지 알기 위해 다른 데이터베이스 (DB Links에서 참조하는 쿼리)에서 쿼리를 실행하고 다른 결과 (정확한)를주었습니다.

select count(*) from [email protected] mt 
    where mt.stat = '2473' 
     and mt.name= 'Tom' 
     and exists (select * from company_users cu, 
        personnel_records pr 
        where cu.user_id = pr.user_id 
        and mt.name = pr.name 
        and mt.stat = cu.stat 
       ) 

0 (예상대로)을 반환합니다.

+0

실행중인 Oracle 버전과 플랫폼을 인용해야합니다. –

+0

테이블 정의를 제공 할 수 있습니까? –

+0

@Jonathan 10g을 사용하고 있으며 SQL Developer에서이 쿼리를 실행하고 있습니다. –

답변

0

첫 번째 쿼리에 대한 Explain 계획을 살펴보십시오. 나는 버그가 있다고 의심하고, 쿼리 계획은 잘못된 재 작성이 어떻게 수행되고 있는지를 보여줄 수있다.

1

질문에서 두 번째 쿼리는 약간 다릅니다. 즉, cu.stat을 전혀 보지 않아서 cu.stat = '2473'과 아무 관련이 없음을 알 수 없습니다. 당신이

select count(*) 
    from [email protected] cu,  
     [email protected] pr, 
     my_tab mt 
    where mt.stat = '2473' and 
     mt.name = 'Tom' and 
     pr.name = mt.name and 
     cu.user_id = pr.user_id and 
     cu.stat = mt.stat 

나는이 EXISTS를 사용하지 않고 첫 번째 쿼리에 해당 생각하고, 정확한 결과를 제공한다을 실행하면 당신은 어떤 결과를 얻을 수 없습니다.

공유하고 즐기십시오.

+0

죄송합니다. 원래 쿼리에서 특정 줄이 잘못되었습니다. 나는 그것을 지금 새롭게 할 것이다. 두 번째 쿼리에서 설정되는 mt.stat 대신 cu.stat가 있어야합니다. 내 원래 쿼리에서 많은 여분의 것들을 잘라내지만 이것은 동일한 동작을 제공합니다. –

관련 문제