Nat*_*ate 9 php mysql join left-join
我目前将此左连接作为查询的一部分:
LEFT JOIN movies t3 ON t1.movie_id = t3.movie_id AND t3.popularity = 0
Run Code Online (Sandbox Code Playgroud)
麻烦的是,如果有几部电影具有相同的名称和相同的受欢迎程度(不要问,它只是这样:-))然后返回重复的结果.
总而言之,我想将左连接的结果限制为一个.
我试过这个:
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
Run Code Online (Sandbox Code Playgroud)
第二个查询因错误而死:
Every derived table must have its own alias
Run Code Online (Sandbox Code Playgroud)
我知道我问的是有点模糊,因为我没有提供完整的查询,但我一般都会问这个问题吗?
Mic*_*ski 18
错误很明显 - 您只需要在子查询结束后为子查询创建别名,)并在ON子句中使用它,因为每个表派生或真实都必须有自己的标识符.然后,您需要movie_id在子查询的选择列表中包含以便能够加入它.由于子查询已包含WHERE popularity = 0,因此您无需将其包含在join的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
Run Code Online (Sandbox Code Playgroud)
如果您在外部使用其中一列,请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
Run Code Online (Sandbox Code Playgroud)
Eri*_*son 10
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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37099 次 |
| 最近记录: |