目前,我有这个左加入作为查询的一部分:
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
我知道我问的是微渺,因为我没有提供完整的查询,但就是我通常要求可能吗?
错误是明确的-你只需要为子查询创建一个别名以下闭幕)
,并用它你在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
你可以尝试添加GROUP BY t3.movie_id
的第一个查询
尝试这个:
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