Workaround voor LIMIT in subquery (MySQL)

Status
Niet open voor verdere reacties.

MNL22

Nieuwe gebruiker
Lid geworden
25 mei 2013
Berichten
1
Hallo allemaal,

Ik wil via een query graag een selectie maken van alle records, behalve de laatste 5000.
Daar heb ik de volgende query voor gemaakt:

SELECT *
FROM table1
WHERE id NOT IN
(SELECT id
FROM table1
ORDER BY id DESC
LIMIT 0, 5000)

Normaal zou gesproken zou dit werken, maar MySQL ondersteunt vervelend en vreemd genoeg geen LIMIT in subqueries.

Heeft iemand een idee hoe ik dit met een workaround toch voor elkaar zou kunnen krijgen?
Ik heb al het een en ander met joins geprobeerd, maar tot nu toe niet met het gewenste resultaat...
 
Het is inderdaad enigszins triest dat "'s werelds populairste opensource database" niet eens een limit in een subquery aankan. Maarja, ze gebruiken ook REPEATABLE_READ als transactielevel... hoe verzin je het.

Anyhoes, Je sorteert op id dus blijkbaar geldt bij jou de regel dat elk nieuwe record altijd een hoger id krijgt dan het vorige (nee, dat is niet vanzelfsprekend en het is meestal niet eens waar)
Wat je kunt doen is eerst ophalen wat het id van het 5000e record is, en in een tweede query alles selecteren waarvan het id lager is dan dat gevonden id.

Een alternatief (als MySQL het kan) is EXCEPT:

SELECT * FROM tabel
EXCEPT
SELECT * FROM tabel ORDER BY id DESC LIMIT 5000;

Elke database kan dat, dus MySQL zal het wel weer niet kunnen... (goh Vincent, heb je iets tegen MySQL ofzo? Nee hoor, helemaal niet. Hoe kom je erbij.)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan