oops! I hit SEND before I was done. (BAD FINGERS!) SELECT * FROM movies LEFT JOIN director_movies ON director_movies.movie_id=movies.id LEFT JOIN director ON director_movies.director_id = director.id LEFT JOIN country_movies ON country_movies.movie_id=movies.id LEFT JOIN country ON country_movies.country_id = country.id LEFT JOIN producer_movies ON producer_movies.movie_id=movies.id LEFT JOIN producer ON producer_movies.producer_id = producer.id WHERE movies.id = 123
Now this may not be as fast as doing this in stages. First stage you collect all of the secondary id's into a temporary table. Second stage you hit the master tables and resolve the secondary id's into their actual values. Once you get above 7 or so JOINs per query, performance tends to degrade. CREATE TEMPORARY TABLE tmpMiddle SELECT movies.id, director_movies.director_id, country_movies.country_id, producer_movies.producer_id FROM movies LEFT JOIN director_movies ON director_movies.movie_id=movies.id LEFT JOIN country_movies ON country_movies.movie_id=movies.id LEFT JOIN producer_movies ON producer_movies.movie_id=movies.id WHERE movies.id = 123 ; SELECT * FROM tmpMiddle LEFT JOIN movies ON movies.id = tmpMiddle.id LEFT JOIN director ON tmpMiddle.director_id = director.id LEFT JOIN country ON tmpMiddle.country_id = country.id LEFT JOIN producer ON tmpMiddle.producer_id = producer.id; DROP TEMPORARY TABLE tmpMiddle; This reduces the # of joins from 8 to 4 and based on your initial description you will probably have more than this. Again, this is just another way to look at the issue. Shawn Green Database Administrator Unimin Corporation - Spruce Pine