MySQL Verwijderen met COUNT in INNER JOIN door niet alle records te verwijderen

Ik probeer records uit een tabel te verwijderen als er meer dan 15 van hetzelfde bedrijf zijn (zoals in, als er meer dan 15 records van een bedrijf zijn, worden alle bedrijfsrecords verwijderd).

De vraag die ik gebruik is als volgt:

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;

Dit zou ongeveer 25.000 rijen moeten verwijderen, maar verwijdert vreemd genoeg elke keer ongeveer 500 wanneer ik het rijd:

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)

Ik voeg geen nieuwe rijen toe tussen runs in, dus ik vraag me af waarom het 500 keer verwijdert elke keer dat ik het uitvoer. Zou het niet de eerste keer moeten worden verwijderd, en dan geen rijen met daaropvolgende runs beïnvloeden?

Is er hier een fout van mijn kant, of is er een betere manier om te bereiken wat ik probeer te doen?

2
Wilt u alle rijen verwijderen met meer dan 15 rijen met hetzelfde bedrijf?
toegevoegd de auteur ypercubeᵀᴹ, de bron
Ja. Als een bedrijf meer dan 15 rijen heeft, moeten alle rijen van dat bedrijf worden verwijderd.
toegevoegd de auteur tkooser, de bron

1 antwoord

Als ik het goed begrijp, wil je lid worden van het bedrijf :

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 

De reden achter het rare gedrag is dat u in de subquery gegroepeerd had op bedrijf maar dat u de literature_request_id selecteerde. Maar welke - van de 15 of meer - zou de SQL-engine moeten selecteren? Het was een (min of meer willekeurig) kiezen, dus alleen die rij (1 rij van elk bedrijf) werd verwijderd.

2
toegevoegd
Dat is nu volkomen logisch. Heel erg bedankt.
toegevoegd de auteur tkooser, de bron