Maison >base de données >tutoriel mysql >Comment récupérer un produit par catégorie en utilisant JOIN avec LIMIT 1 ?

Comment récupérer un produit par catégorie en utilisant JOIN avec LIMIT 1 ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 06:38:13301parcourir

How to Retrieve One Product per Category Using JOIN with LIMIT 1?

Joindre des tables avec LIMITE 1 sur la table jointe

La tâche consiste à joindre deux tables mais à récupérer un seul enregistrement de la table jointe par enregistrer dans le premier tableau. Considérez les tableaux suivants :

categories (id, title)
products (id, category_id, title)

Une simple requête joindrait ces tables comme suit :

SELECT c.id, c.title, p.id AS product_id, p.title
FROM categories AS c
JOIN products AS p ON c.id = p.category_id

Cependant, cela renvoie plusieurs lignes pour chaque catégorie, ce qui n'est pas souhaitable. Nous devons limiter les résultats à un enregistrement de la table products par catégorie.

Une approche recommandée dans une question similaire consiste à utiliser une sous-requête pour récupérer la clé primaire de l'enregistrement souhaité :

SELECT
 c.id,
 c.title,
 p.id AS product_id,
 p.title AS product_title
FROM categories AS c
JOIN products AS p ON
 p.id = (
  SELECT p1.id FROM products AS p1
  WHERE c.id=p1.category_id
  ORDER BY p1.id LIMIT 1
 )

Cette requête récupère efficacement les résultats souhaités sans rencontrer de problèmes de requêtes imbriquées. De plus, il surpasse les autres solutions proposées en termes de temps d'exécution, en particulier lorsqu'il s'agit de grands ensembles de données.

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