2013-06-05 105 views
1

我有這兩個我正在運行的查詢。第一個工作,但由於某種原因,EXISTS()函數似乎增加了大約一分鐘的加載時間,這使得它難以忍受。所以我寫了第二個查詢,我覺得應該給出相同的答案,但它給出了一個非常不同的答案。給出不同結果的兩個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

相關問題