我的原始查询是使用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;
我尝试进行左连接,但是肯定做错了什么。
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
和正确的完全指定连接是极其丑陋的。 - Marc B