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 ?

Pourquoi MySQL échoue-t-il lors de l'utilisation de LIMIT dans les sous-requêtes NOT IN ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 00:54:03874parcourir

Why Does MySQL Fail When Using LIMIT in NOT IN Subqueries?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn