1

我正在运行这两个查询。第一个有效,但由于某种原因,EXISTS() 函数似乎增加了大约一分钟的加载时间,这使得它难以使用。所以我写了第二个查询,我觉得应该给出相同的答案,但它给出了一个非常不同的答案。

第一的

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

我不知道这是否足以提供足够的信息,但如果是的话,任何帮助将不胜感激。

4

1 回答 1

1

有可能JOIN在您的COUNT. 如果我正确理解了您的问题,假设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
于 2013-06-05T18:47:46.710 回答