Mysql
 sql >> Database >  >> RDS >> Mysql

Limitare un join sinistro alla restituzione di un risultato?

L'errore è evidente:devi solo creare un alias per la sottoquery dopo la sua chiusura ) e usalo nel tuo ON clausola poiché ogni tabella, derivata o reale, deve avere il proprio identificatore. Quindi, dovrai includere movie_id nell'elenco di selezione della sottoquery per potervi partecipare. Poiché la sottoquery include già WHERE popularity = 0 , non è necessario includerlo nel ON del join clausola.

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 stai utilizzando una di queste colonne nel SELECT esterno , referenzialo tramite the_alias.movie_name per esempio.

Aggiorna dopo aver compreso meglio il requisito:

Per ottenerne uno per gruppo a cui partecipare, puoi utilizzare un aggregato MAX() o MIN() sul movie_id e raggruppalo nella sottoquery. Nessuna sottoquery LIMIT è quindi necessario -- riceverai il primo movie_id per nome con MIN() o l'ultimo con 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