Maison >base de données >tutoriel mysql >Comment récupérer uniquement la première ligne d'un LEFT JOIN pour un flux spécifique ?

Comment récupérer uniquement la première ligne d'un LEFT JOIN pour un flux spécifique ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 00:06:02241parcourir

How to Retrieve Only the First Row in a LEFT JOIN for a Specific Feed?

LEFT JOIN uniquement la première ligne

Dans le monde des requêtes de base de données, l'opération LEFT JOIN est un outil puissant pour combiner des données de plusieurs tableaux. Cependant, vous pouvez parfois rencontrer le défi de récupérer sélectivement uniquement la première ligne d'un LEFT JOIN, ce qui entraîne une confusion et des résultats apparemment infructueux.

L'un de ces scénarios consiste à récupérer uniquement le premier artiste associé à un flux. Considérez la structure de base de données simplifiée suivante :

  • Flux : identifiant, titre, contenu
  • Artistes : id_artiste, nom_artiste
  • feeds_artists : rel_id, artiste_id, feed_id

Pour récupérer les flux désignés et leurs premiers artistes correspondants, une approche intuitive pourrait impliquer quelque chose comme ce qui suit :

SELECT *
FROM feeds 
LEFT JOIN feeds_artists ON feeds.id = (
  SELECT
    feeds_artists.feed_id
  FROM feeds_artists
  WHERE
    feeds_artists.feed_id = feeds.id 
  LIMIT 1
)
WHERE
  feeds.id = '13815'

Cependant, cette requête peut ne pas donner le résultat souhaité . Essayez plutôt la requête optimisée suivante :

SELECT *
FROM feeds f
LEFT JOIN artists a ON a.artist_id = (
  SELECT
    artist_id
  FROM feeds_artists fa 
  WHERE
    fa.feed_id = f.id
  LIMIT 1
)
WHERE
  f.id = '13815'

Dans cette requête, l'astuce consiste à utiliser une requête en ligne dans l'instruction LEFT JOIN. Cette requête en ligne sélectionne l'identifiant d'artiste du premier artiste associé à chaque flux, en partant de l'hypothèse que les identifiants d'artiste augmentent au fil du temps. Par conséquent, la requête résultante récupère la ligne souhaitée, démontrant ainsi la puissance des requêtes de base 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