Mysql
 sql >> Base de données >  >> RDS >> Mysql

Limiter une jointure gauche à renvoyer un résultat ?

L'erreur est claire - il vous suffit de créer un alias pour la sous-requête après sa fermeture ) et utilisez-le dans votre ON clause puisque chaque table, dérivée ou réelle, doit avoir son propre identifiant. Ensuite, vous devrez inclure movie_id dans la liste de sélection de la sous-requête pour pouvoir s'y joindre. Puisque la sous-requête inclut déjà WHERE popularity = 0 , vous n'avez pas besoin de l'inclure dans le ON de la jointure clause.

LEFT JOIN (
  SELECT
    movie_id, 
    movie_name 
  FROM movies 
  WHERE popularity = 0
  ORDER BY movie_name
  LIMIT 1
) the_alias ON t1.movie_id = the_alias.movie_id

Si vous utilisez l'une de ces colonnes dans le SELECT externe , référencez-le via the_alias.movie_name par exemple.

Mettre à jour après avoir mieux compris l'exigence :

Pour en obtenir un par groupe, vous pouvez utiliser un agrégat MAX() ou MIN() sur le movie_id et regroupez-le dans la sous-requête. Aucune sous-requête LIMIT est alors nécessaire -- vous recevrez le premier movie_id par nom avec MIN() ou le dernier avec MAX() .

LEFT JOIN (
  SELECT
    movie_name,
    MIN(movie_id) AS movie_id
  FROM movies
  WHERE popularity = 0
  GROUP BY movie_name
) the_alias ON t1.movie_id = the_alias.movie_id