【发布时间】:2011-12-08 12:22:27
【问题描述】:
我的原始查询是使用 WHERE 子句而不是 JOIN 进行连接。我意识到这不是返回没有任何明星或流派的电影没有出现,所以我认为我必须做一个 LEFT JOIN 才能展示每部电影。这是我的原始 SQL:
SELECT *
FROM movies m, stars s, stars_in_movies sm, genres g, genres_in_movies gm
WHERE m.id = sm.movie_id
AND sm.star_id = s.id
AND gm.genre_id = g.id
AND gm.movie_id = m.id
AND m.title LIKE '%the%'
AND s.first_name LIKE '%Ben%'
ORDER BY m.title ASC
LIMIT 5;
我尝试对电影进行 LEFT JOIN,但我肯定做错了什么。
SELECT *
FROM movies m, stars s, stars_in_movies sm, genres g, genres_in_movies gm
LEFT JOIN movies m1 ON m1.id = sm.movie_id
LEFT JOIN movies m2 ON m2.id = gm.movie_id
AND sm.star_id = s.id
AND gm.genre_id = g.id
ORDER BY m.title ASC
LIMIT 5;
我得到ERROR 1054 (42S22): Unknown column 'sm.movie_id' in 'on clause' 很明显我做错了加入,我只是不明白它是什么。
【问题讨论】:
-
嘎啊。将懒惰的
FROM table,table,table与适当的完全指定的连接混合起来非常难看。