Php SQL总是返回在大型表上执行的SELECT查询的所有行

Php SQL总是返回在大型表上执行的SELECT查询的所有行,php,mysql,Php,Mysql,在小型测试数据库(100条记录)上执行以下查询时,MySQL(phpMyAdmin)返回预期的行数: SELECT ReportedDate FROM table WHERE ReportedDate IN ( SELECT ReportedDate FROM table GROUP BY ReportedDate HAVING count(*) > 1 ORDER BY ugid, ReportedDate

在小型测试数据库(100条记录)上执行以下查询时,MySQL(phpMyAdmin)返回预期的行数:

SELECT ReportedDate 
FROM table
WHERE ReportedDate IN (
       SELECT ReportedDate  
       FROM table
       GROUP BY ReportedDate  
       HAVING count(*) > 1 
       ORDER BY ugid, ReportedDate
 )
然而,当我对实际的表(150万条记录)执行相同的查询时,MySQL返回所有行,就像使用
SELECT*fromtable
查询一样


感谢您提供的任何帮助

可能您的表没有唯一的
ReportedDate
值-它们在表中至少出现两次。

不需要您的子查询,并且数据集较大会影响性能

您可以尝试以下操作,而不是使用子查询和
count(*)

SELECT ReportedDate  
FROM table
GROUP BY ReportedDate  
HAVING count(DISTINCT ReportedDate) > 1 
ORDER BY ugid, ReportedDate

注意having子句中的区别。

两个表相同?是的,两个表都相同。对于同一个表,为什么要进行子查询?不能按
ugid
排序。我认为它甚至不需要。没有表模式就无法知道。您可以按表中的列排序,即使它不在返回的列列表中。否。仅在
ReportedDate
上进行聚合时不适用。但是,您可以在其上使用聚合函数。类似于-
orderbymax(ugid),ReportedDate