2011-07-01 5 views
0

を関与:new_movies、評価、critic_ratings、色MySQLの適切な方法は、私はこれらのテーブルを持っている映画のデータベースを持っている

は、私は同じで、これらの4つのテーブルを結合します。このSELECT文を実行しようとしています映画 'ミッド'(動画ID)を使用して:

SELECT DISTINCT 
    new_movies.*, 
    movies_db.*, 
    ratings.rating, 
    ratings.count,color, 
    critic_ratings.rating AS critic_ratings 
FROM 
    new_movies 
INNER JOIN 
    movies_db 
ON 
    new_movies.mid = movies_db.mid 
LEFT JOIN 
    ratings 
ON 
    new_movies.mid = ratings.mid 
LEFT JOIN 
    colors 
ON 
    new_movies.mid = colors.mid 
LEFT JOIN 
    critic_ratings 
ON 
    new_movies.mid = critic_ratings.mid 
ORDER BY 
    title ASC 

をしかし、私はこのエラーを取得する:

The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

にはどうすれば適切にこのクエリを行うのですか?

+3

'SET SQL_BIG_SELECTS = 1'または 'SET SQL_MAX_JOIN_SIZE =#'を試しましたか? – Flimzy

答えて

1

大きな選択を有効にしたくない場合は、相関サブクエリを使用してこれを変更できます。 (あなたはまだかかわらず、限界に達していないかだろうかどうかは知りません。)LEFTが実際に原因で参加した場合、テストの価値

また
SELECT DISTINCT 
    new_movies.*, 
    movies_db.*, 
    (SELECT rating FROM ratings  WHERE new_movies.mid = ratings.mid) AS rating, 
    (SELECT count FROM ratings  WHERE new_movies.mid = ratings.mid) AS rating_count, 
    (SELECT color FROM colors   WHERE new_movies.mid = colors.mid) AS colour, 
    (SELECT rating FROM critic_ratings WHERE new_movies.mid = critic_ratings.mid) AS critic_ratings 
FROM 
    new_movies 
INNER JOIN 
    movies_db 
    ON new_movies.mid = movies_db.mid 
ORDER BY 
    title ASC 

は、参照するには、次のように実行することができますか?

SELECT DISTINCT 
    new_movies.*, 
    movies_db.* 
FROM 
    new_movies 
INNER JOIN 
    movies_db 
    ON new_movies.mid = movies_db.mid 
ORDER BY 
    title ASC 
0

なぜ映画とnew_moviesテーブルがありますか?確かにリリースの日付フィールドで十分です - これも結合を切断するだろう...

私はそのデータのビューを作成し、その代わりにクエリを作成します。

しかし、戻ってあなたのクエリに:

SELECT DISTINCT 
    new_movies.*, 
    movies_db.*, 
    ratings.rating, 
    ratings.count, 
    color, 
    critic_ratings.rating AS critic_ratings 
FROM 
    new_movies 
INNER JOIN 
    movies_db 
ON 
    new_movies.mid = movies_db.mid 
LEFT JOIN 
    ratings 
ON 
    new_movies.mid = ratings.mid 
LEFT JOIN 
    colors 
ON 
    new_movies.mid = colors.mid 
LEFT JOIN 
    critic_ratings 
ON 
    new_movies.mid = critic_ratings.mid 
ORDER BY 
    title ASC 

私は、おそらくあなたが説明したクエリの結果を投稿することができます...明らかに何かを見ることができませんか?

0

クエリに問題はありませんそれ自体はです。すべての映画を選択しているだけです(どこにもLIMITはありません)。また、あなたが評価に参加しているので、すべての評価が各映画に加わります。ジョインに許可されているデータの最大量に達するだけです。

なぜすべての映画を選択する必要があるのか​​わかりません。多分あなたは限界を使うことができます。それ以外の場合は、エラーメッセージで解決策を試すことができます。

関連する問題