Utilisation d’un LIMIT dans une sous-requête avec MySQL

Si vous avez déjà essayé d’utiliser un LIMIT dans une sous-requête vous avez très certainement rencontré ce message ci:

This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’

Heureusement, il y a la possibilité de contourner cela selon une astuce similaire à celle présentée dans un article précédent.

Prenons l’exemple d’une table qui sert de file d’attente pour l’envoi d’emails. La requête suivante est acceptée par MySQL:

SELECT * FROM email_queue LIMIT 0,200

Donc on peut sélectionner les premiers 200 emails en attente. Par contre, cette requête est réfusée:

DELETE FROM email_queue where id in (select id from email_queue LIMIT 0,200)

Comment procéder alors? Il s’agit de tout simplement reprendre le SELECT initial dans un alias avec un SELECT et le mot clé AS comme suit:

DELETE FROM email_queue WHERE id IN (SELECT * FROM (SELECT id FROM email_queue LIMIT 0,200) AS temp)

Ainsi on a la possibilité d’à la fois sélectionner des emails avec un LIMIT mais également de les supprimer ou les mettre à jour (UPDATE) selon les mêmes critères.

– James Poulson.

Une réflexion au sujet de « Utilisation d’un LIMIT dans une sous-requête avec MySQL »

Les commentaires sont fermés.