-->

限制左连接到返回一个结果?(Limiting a left join to returning on

2019-09-19 05:31发布

目前,我有这个左加入作为查询的一部分:

LEFT JOIN movies t3 ON t1.movie_id = t3.movie_id AND t3.popularity = 0

麻烦的是,如果有几部电影用相同的名称和普及(不要问,它仅仅是这样:-))然后复制返回结果。

所有这一切说,我想限制左边的结果连为一体。

我尝试这样做:

LEFT JOIN 
    (SELECT t3.movie_name FROM movies t3 WHERE t3.popularity = 0 LIMIT 1)
     ON t1.movie_id = t3.movie_id AND t3.popularity = 0

第二个查询死亡与错误:

Every derived table must have its own alias

我知道我问的是微渺,因为我没有提供完整的查询,但就是我通常要求可能吗?

Answer 1:

错误是明确的-你只需要为子查询创建一个别名以下闭幕) ,并用它你在ON ,因为每个表条款,衍生或真实的,必须有自己的标识。 然后,你需要包括movie_id子查询的选择列表,以便能够参加就可以了。 由于子查询中已经包含WHERE popularity = 0 ,你不需要把它列入联接的ON子句。

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

如果您正在使用外,这些列中的一个SELECT ,通过引用它the_alias.movie_name例如。

更好地了解需求后更新:

为了让每个组的加入对一个,你可以使用聚合MAX()MIN()movie_id子查询和组了。 无子查询LIMIT然后有必要-您会收到第一movie_id每名与MIN()或最后用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


Answer 2:

你可以尝试添加GROUP BY t3.movie_id的第一个查询



Answer 3:

尝试这个:

LEFT JOIN 
    (
     SELECT t3.movie_name, t3.popularity   
     FROM movies t3 WHERE t3.popularity = 0 LIMIT 1
    ) XX
     ON  t1.movie_id = XX.movie_id AND XX.popularity = 0


文章来源: Limiting a left join to returning one result?