两个MySQL查询给出不同的结果

时间:2013-06-05 18:35:31

标签: mysql join exists

我正在运行这两个查询。第一个工作,但由于某种原因,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

我不知道这是否足够信息,但如果是,那么任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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