Maison >base de données >tutoriel mysql >Comment puis-je limiter les résultats de jointure à un seul enregistrement par ligne de la table jointe ?

Comment puis-je limiter les résultats de jointure à un seul enregistrement par ligne de la table jointe ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 11:09:03488parcourir

How Can I Limit Join Results to a Single Record per Row from the Joined Table?

LIMIT JOIN : Récupération d'enregistrements uniques à partir de tables jointes

Lors de la jointure de deux tables, il peut être nécessaire de limiter les résultats à un seul enregistrement par ligne de la table jointe. Ceci peut être réalisé dans MySQL en utilisant la clause LIMIT 1 sur la sous-requête référencée par la clause de jointure.

Considérez le scénario dans lequel nous souhaitons joindre les tables de catégories et de produits pour obtenir des informations sur les catégories et le premier produit associé à chacune. catégorie.

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

Cette requête renverrait tous les enregistrements de produits pour chaque catégorie, ce qui n'est pas le résultat souhaité. Pour limiter les résultats au premier produit de chaque catégorie, nous pouvons modifier la requête comme suit :

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
 )

Dans cette requête modifiée, une sous-requête est utilisée pour récupérer l'identifiant du premier produit de chaque catégorie. Cet identifiant est ensuite utilisé dans la clause de jointure pour limiter les résultats à l'enregistrement unique souhaité.

Cette approche est particulièrement efficace dans les scénarios avec un grand nombre de produits, car elle évite la surcharge de performances liée à l'agrégation de plusieurs enregistrements de produits. pour chaque catégorie. De plus, il est applicable à la fois dans MySQL et PostgreSQL, offrant une solution polyvalente pour la récupération 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