Maison >base de données >tutoriel mysql >Comment corriger l'erreur « LIMIT & IN/ALL/ANY/SOME subquery » de MySQL à l'aide des JOIN ?

Comment corriger l'erreur « LIMIT & IN/ALL/ANY/SOME subquery » de MySQL à l'aide des JOIN ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-13 10:08:18812parcourir

How to Fix MySQL's

Erreur de requête imbriquée MySQL : 'LIMIT & IN/ALL/ANY/SOME sous-requête' non prise en charge

Cette erreur se produit lors de la tentative d'utilisation une sous-requête avec une clause LIMIT dans une clause IN dans MySQL. Pour résoudre ce problème, une approche alternative consiste à utiliser un JOIN :

Code original :

$Last_Video         = $db->fetch_all('
SELECT VID, thumb
FROM video
WHERE VID IN (
    SELECT VID
    FROM video
    WHERE title LIKE "%'.$Channel['name'].'%"
    ORDER BY viewtime DESC
    LIMIT 5)
ORDER BY RAND()
LIMIT 1
');

Code refactorisé avec JOIN :

SELECT v.VID, v.thumb
FROM video AS v
INNER JOIN
     (SELECT VID
     FROM video
     WHERE title LIKE "%'.$Channel['name'].'%"
     ORDER BY viewtime DESC
     LIMIT 5) as v2
  ON v.VID = v2.VID
ORDER BY RAND()
LIMIT 1

Explication :

L'opération JOIN relie les deux tables (vidéo et v2) en fonction de la colonne VID commune. Cela élimine le besoin d'une requête imbriquée avec une clause LIMIT dans la clause IN, qui n'est pas prise en charge dans la version actuelle de MySQL.

Avantages de JOIN :

  • Performances améliorées en réduisant le nombre de requêtes de base de données.
  • Requête plus simple et plus lisible structure.
  • Prise en charge de scénarios de requêtes plus complexes avec plusieurs tables et conditions.

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