データベースは次のとおりです。
Classes Challenges Class Challenges
id id id
title class_id
challenge_id
特定のクラスのすべての課題を取得するために、次を使用します
SELECT
DISTINCT class_challenges.challenge_id,
challenges.title
FROM class_challenges
LEFT JOIN challenges
ON class_challenges.challenge_id = challenges.id
WHERE class_challenges.class_id = :class_id
ORDER BY challenge_id
特定のクラスに属さないすべての課題に対して同じことを行うにはどうすればよいですか? これまでのところ、私は使用しています:
SELECT
DISTINCT challenges.id,
challenges.title
FROM
challenges,
class_challenges
WHERE challenges.id NOT IN(
SELECT
DISTINCT class_challenges.challenge_id
FROM class_challenges
LEFT JOIN challenges
ON class_challenges.challenge_id = challenges.id
WHERE class_challenges.class_id = :class_id
ORDER BY challenge_id
);
もっとうまく書けると思います。(おそらく二重結合を使用していますか?)
では、これをどのように最適化できますか (可能な場合)。