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
Libérer: 2024-11-16 00:54:03
original
905 Les gens l'ont consulté

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);
Copier après la connexion

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);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal