15

我目前将此左连接作为查询的一部分:

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

我知道我要问的内容有点模糊,因为我没有提供完整的查询,但是我要问的内容通常可能吗?

4

6 回答 6

28

错误很明显——您只需要在子查询关闭后为其创建一个别名)并在您的子句中使用它,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
于 2012-07-09T02:30:42.193 回答
6
LEFT JOIN movies as m ON m.id = (
    SELECT id FROM movies mm WHERE mm.movie_id = t1.movie_id
    ORDER BY mm.id DESC
    LIMIT 1    
)
于 2019-08-23T12:27:33.170 回答
2

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

于 2012-07-09T02:37:40.020 回答
1

试试这个:

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
于 2012-07-09T02:30:54.533 回答
1

在 MySQL 5.7+ 上使用ANY_VALUE & GROUP_BY

SELECT t1.id,t1.movie_name, ANY_VALUE(t3.popularity) popularity
FROM t1
LEFT JOIN t3 ON (t3.movie_id=t1.movie_id AND t3.popularity=0)
GROUP BY t1.id

更多信息 LEFT JOIN 仅第一行

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

于 2020-12-22T11:10:12.583 回答
0

左加入 1 个最近/最近的行的简单解决方案是使用 select over ON 短语

SELECT A.ID, A.Name, B.Content
FROM A
LEFT JOIN B
ON A.id = (SELECT MAX(id) FROM B WHERE id = A.id)

其中 A.id 是自动增量主键。

于 2021-12-28T10:56:33.237 回答