2017-09-23 59 views
-3

當小測試數據庫(100個記錄)上執行下面的查詢中,MySQL(phpMyAdmin的)返回的行數執行SELECT查詢所有行預期:SQL總是返回上一大桌

SELECT ReportedDate 
FROM table 
WHERE ReportedDate IN (
     SELECT ReportedDate 
     FROM table 
     GROUP BY ReportedDate 
     HAVING count(*) > 1 
     ORDER BY ugid, ReportedDate 
) 

但是,當我在實際的表(150萬條記錄)上執行相同的查詢時,MySQL會返回所有行,就好像它將與SELECT * FROM table查詢一樣。

謝謝你的任何形式的幫助

+0

兩張表都一樣嗎? – Amir

+0

是的,兩個表都是一樣的。 – Discobarry

+0

對於同一張表,你爲什麼要進行子查詢? –

回答

0

可能是你的表沒有唯一ReportedDate值 - 它們出現在表中至少兩次,每次。

1

您的子查詢不是必需的,而且大數據集會影響性能。

而不是使用子查詢和count(*)的,你可以試試這個:

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

通知獨特的具有子句。

+0

你不能通過'ugid'在那裏訂購。我認爲這不是必需的。 – GurV

+0

沒有辦法知道沒有表架構。您可以通過表中的列進行排序,即使它不在返回的列列表中。 –

+0

不是,只在'ReportedDate'上進行彙總。但是,您可以在其上使用聚合函數。類似於 - 「由max(ugid),ReportedDate'命令 – GurV