0

これは私がここで提起した質問のフォローアップです。同じ種類のクエリを使用して、「genre.name=」「ClassicMovies」や「star.name=Humphrey Bogart」などの制限がある場合に、10本の映画を確実に取り戻すにはどうすればよいですか。明確にするために、クエリは、フィルタリングの制限に関係なく、10本の映画のデータを返す必要があります。

SELECT movie.id, movie.title, star.name, star.name_url, dir.name, 
       dir.name_url, genre.name, genre.name_url 
FROM 
        (SELECT * FROM movie WHERE movie.id > 0 ORDER BY movie.id LIMIT 10) movie
        LEFT JOIN actor 
             ON (movie.id = actor.movie_id) 
        LEFT JOIN person AS star 
             ON (actor.person_id = star.id) 
        LEFT JOIN director 
             ON (movie.id = director.movie_id) 
        LEFT JOIN person AS dir 
             ON (director.person_id = dir.id) 
        LEFT JOIN genre_classification 
             ON (movie.id = genre_classification.movie_id) 
        LEFT JOIN genre 
             ON (genre_classification.genre_id = genre.id)
4

1 に答える 1

1

問題は、次のサブ選択を使用して、データベースから10本の映画のリストを選択していることです。

(SELECT * FROM movie WHERE movie.id > 0 ORDER BY movie.id LIMIT 10) movie

その副選択の外側でWHERE句を使用してそのリストをさらにフィルタリングしようとすると、10行すべてが条件に一致するわけではないため、これらの10行より少なくなる可能性があります。次のように、その新しい基準を副選択に追加できます。

(SELECT * FROM movie m INNER JOIN genre_classification g on g.movie_id = m.id and g.name = 'Classic Movies' WHERE m.id > 0 ORDER BY m.id LIMIT 10) movie

これは同じことをしますが、「クラシック映画」のジャンルが一致する映画を10本(最大)しか提供しません。

もちろん、俳優、監督、その他のジャンルなどで使用しているため、これでも10行以上が返されます。JOINただし、結果セットには最大10個の個別の映画IDが含まれている必要があります。

完全なクエリ:

SELECT movie.id, movie.title, star.name, star.name_url, dir.name, 
       dir.name_url, genre.name, genre.name_url 
FROM 
        (SELECT * FROM movie m INNER JOIN genre_classification g on g.movie_id = m.id and g.name = 'Classic Movies' WHERE m.id > 0 ORDER BY m.id LIMIT 10) movie
        LEFT JOIN actor 
             ON (movie.id = actor.movie_id) 
        LEFT JOIN person AS star 
             ON (actor.person_id = star.id) 
        LEFT JOIN director 
             ON (movie.id = director.movie_id) 
        LEFT JOIN person AS dir 
             ON (director.person_id = dir.id) 
        LEFT JOIN genre_classification 
             ON (movie.id = genre_classification.movie_id) 
        LEFT JOIN genre 
             ON (genre_classification.genre_id = genre.id)
于 2012-08-30T16:52:08.453 に答える