2011-12-06 102 views
2

我試圖從一個表中刪除記錄,如果有超過15個來自同一家公司(如果有超過15個公司的記錄,所有的公司記錄被刪除)。MySQL刪除INNER JOIN中的COUNT不刪除所有記錄

我使用的查詢如下:

DELETE l.* FROM literature_request l 
INNER JOIN 
    (SELECT literature_request_id 
    FROM literature_request 
    GROUP BY company 
    HAVING COUNT(*) > 15) lr 
ON l.literature_request_id = lr.literature_request_id; 

這應該大約25,000行的地方刪除,但每次只奇怪刪除約500我運行它:

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 564 rows affected (0.39 sec) 

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 547 rows affected (2.24 sec) 

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15 LIMIT 0,30000) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 533 rows affected (1.27 sec) 

mysql> DELETE l.* FROM literature_request l INNER JOIN (SELECT literature_request_id FROM literature_request GROUP BY company HAVING COUNT(*) > 15 LIMIT 0,30000) lr ON l.literature_request_id = lr.literature_request_id; 
Query OK, 523 rows affected (0.43 sec) 

我m不會在運行之間添加新行,所以我想知道爲什麼每次運行它時會刪除〜500。它不應該第一次刪除所有這些,並且不會影響後續運行的任何行嗎?

這裏有我的錯誤,還是有更好的方法來完成我想要做的?

+0

是否要刪除那些行數多於15行的公司? –

+0

是的。如果一家公司有超過15行,那麼該公司的所有行應該被刪除。 – tkooser

回答

2

如果我理解正確的話,你想加入的company

DELETE l FROM literature_request l 
INNER JOIN 
    (SELECT company 
    FROM literature_request 
    GROUP BY company 
    HAVING COUNT(*) > 15) lr 
ON l.company = lr.company 

背後的怪異行爲的原因是,在子查詢,你被company分組但你選擇literature_request_id。但是,SQL引擎應該選擇哪一個 - 15個或更多?它選擇一個(或多或少隨機),因此只有該行(每個公司的一行)被刪除。

+0

現在完美無缺。非常感謝。 – tkooser