Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Limitando uma junção esquerda para retornar um resultado?


O erro é claro - você só precisa criar um alias para a subconsulta após o fechamento ) e use-o em seu ON cláusula, pois toda tabela, derivada ou real, deve ter seu próprio identificador. Em seguida, você precisará incluir movie_id na lista de seleção da subconsulta para poder ingressar nela. Como a subconsulta já inclui WHERE popularity = 0 , você não precisa incluí-lo no ON da junção cláusula.
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

Se você estiver usando uma dessas colunas no SELECT externo , faça referência a ele por meio de the_alias.movie_name por exemplo.

Atualize depois de entender melhor o requisito:


Para obter um por grupo para se juntar, você pode usar um agregado MAX() ou MIN() no movie_id e agrupe-o na subconsulta. Sem subconsulta LIMIT é necessário -- você receberá o primeiro movie_id por nome com MIN() ou o último com 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