Maison >base de données >tutoriel mysql >Pourquoi MySQL échoue-t-il lors de l'utilisation de LIMIT dans les sous-requêtes NOT IN ?
LIMIT dans les sous-requêtes NOT IN : limitations de MySQL
Lorsque vous travaillez avec MySQL, vous pouvez rencontrer des limitations lors de l'utilisation de sous-requêtes dans les clauses LIMIT. Un problème courant survient lorsque vous tentez de supprimer des enregistrements qui ne sont pas inclus dans une plage spécifique.
Supposons que vous souhaitiez supprimer des publications qui ne font pas partie des 15 dernières. Une approche naïve pourrait impliquer la requête suivante :
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15);
Cependant, cette requête échouera probablement et renverra un message d'erreur tel que "MySQL ne prend pas encore en charge la sous-requête LIMIT & IN/ALL/ANY/SOME."
Résoudre le problème Limitation
Pour surmonter cette limitation, vous pouvez utiliser une solution de contournement en enfermant la sous-requête dans une autre sous-requête :
DELETE FROM posts WHERE id NOT IN (SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
Dans cette requête modifiée, la sous-requête qui sélectionne les 15 dernières publications se voit attribuer un alias « t », puis la sous-requête externe utilise l'alias pour récupérer les ID exclus. Le résultat est une requête valide qui devrait aboutir à la suppression souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!