我正在运行这两个查询。第一个工作,但由于某种原因,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
我不知道这是否足够信息,但如果是,那么任何帮助将不胜感激。
答案 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