Maison >base de données >tutoriel mysql >Comment récupérer un produit par catégorie en utilisant JOIN avec 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!