2013-06-05 1 views
1

내가 실행 해요이 두 쿼리가 있습니다. 첫 번째는 작동하지만, 어떤 이유로 EXISTS() 함수를 사용하는 것을 참을 수로드 시간의 분에 대해 추가 보인다. 그래서 나는 같은 대답을한다고 생각 두 번째 쿼리를 작성하지만, 대신 매우 differt 대답을 제공합니다.두 MySQL의 쿼리는

먼저

select 
count(`FavoritesHeaderID`) `count` 
from `favoritesheader` 
join `vwactiveevent` on `vwactiveevent`.`MainEventID`=`favoritesheader`.`MainEventID` 
where `Admin`=0 
and exists(
select 1 
from `invoiceheader` 
join `vwactiveevent` on `vwactiveevent`.`MainEventID`=`invoiceheader`.`MainEventID` 
where `Phone`=`favoritesheader`.`CellPhone` 
and `OrderStatusID`=2 
); => 284 

둘째

select 
count(`FavoritesHeaderID`) `count` 
from `favoritesheader` 
join `vwactiveevent` on `vwactiveevent`.`MainEventID`=`favoritesheader`.`MainEventID` 
join `invoiceheader` on `vwactiveevent`.`MainEventID`=`invoiceheader`.`MainEventID` 
where `Admin`=0 
and `Phone`=`favoritesheader`.`CellPhone` 
and `OrderStatusID`=2; => 1578 

단지이 떨어져 갈 충분한 정보인지 잘 모르겠지만, 그 다음 인 경우 어떤 도움이 많이 될 것입니다 고맙습니다.

+0

결과에 대해 다른 무엇을 ? – Joe

+0

내 나쁜, 내가 처음이 게시 특히, 지금 –

답변

1

기회는 JOINCOUNT에 중복 행이 포함되어 있습니다. 내가 FavoritesHeaderID 가정, 제대로 질문을 이해하고있어 독특하고 당신이 COUNT하려는 필드의 경우 각 쿼리에 DISTINCT를 추가 할 수 있으며 같은 수를 반환해야합니다 :

select 
    count(distinct `FavoritesHeaderID`) `count` 
from `favoritesheader` 
    join `vwactiveevent` on `vwactiveevent`.`MainEventID`=`favoritesheader`.`MainEventID` 
    join `invoiceheader` on `vwactiveevent`.`MainEventID`=`invoiceheader`.`MainEventID` 
where `Admin`=0 
    and `Phone`=`favoritesheader`.`CellPhone` 
    and `OrderStatusID`=2 
+0

당신은 확실히 당신의 물건을 알고 업데이트, 나는 질문에 누락 된 정보였다. 감사합니다 –

+0

@stumpx - NP, 내가 도움이 될 수 기뻐! – sgeddes