Php SQL总是返回在大型表上执行的SELECT查询的所有行
在小型测试数据库(100条记录)上执行以下查询时,MySQL(phpMyAdmin)返回预期的行数: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
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