Maison >base de données >tutoriel mysql >Comment limiter les résultats par table lors de l'utilisation de l'opérateur UNION de MySQL ?

Comment limiter les résultats par table lors de l'utilisation de l'opérateur UNION de MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-14 12:57:44238parcourir

How to Limit Results Per Table When Using MySQL's UNION Operator?

Utilisation combinée des opérateurs UNION et LIMIT dans MySQL

Lors de l'interrogation de données de plusieurs tables à l'aide de l'opérateur UNION, vous devrez peut-être appliquer l'opérateur LIMIT à chaque ensemble de résultats séparément. Ceci est accompli en plaçant LIMIT entre parenthèses entourant chaque instruction SELECT.

L'exemple suivant est conçu pour extraire 20 emplois de deux entreprises spécifiques, avec une limite de 10 emplois par entreprise :

Exemple incorrect :

<code class="language-sql">SELECT c.name, j.title, j.`desc`, j.link
  FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name IN ('Company1')
UNION
SELECT c.name, j.title, j.`desc`, j.link
  FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name IN ('Company2')
ORDER BY name, title
LIMIT 20;</code>

Le LIMIT 20 du code ci-dessus agit sur le jeu de résultats après UNION, pas sur une seule instruction SELECT.

Exemple correct :

<code class="language-sql">(SELECT c.name, j.title, j.`desc`, j.link
  FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name = 'Company1'
ORDER BY name, title
LIMIT 10)
UNION
(SELECT c.name, j.title, j.`desc`, j.link
  FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name = 'Company2'
ORDER BY name, title
LIMIT 10);</code>

En entourant chaque instruction SELECT de parenthèses et en appliquant LIMIT 10 individuellement, nous limitons efficacement les résultats aux 10 premières positions de chaque entreprise. Si une entreprise compte moins de 10 postes, la requête renverra toujours tous les résultats disponibles.

Cette approche suit les instructions de la documentation selon lesquelles "Pour appliquer ORDER BY ou LIMIT à un seul SELECT, placez la clause entre parenthèses entourant le SELECT". Il convient de noter que cette méthode trie et restreint uniquement chaque sous-requête et que le tri des résultats finaux nécessite un traitement supplémentaire. Si vous devez trier les résultats finaux fusionnés, vous devez ajouter une autre instruction ORDER BY au niveau le plus externe.

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