2011-07-14 3 views
0
SELECT SQL_CALC_FOUND_ROWS e.* 
FROM exercises e 
LEFT JOIN exercise_targetedmuscles em ON em.exerciseID = e.exerciseID 
WHERE (em.targetedMuscleID NOT IN(15,16,17,14,3,12,9,8,7,18,4,2) AND em.isPrimary = 1) 
GROUP BY e.exerciseID 
ORDER BY e.name ASC 

私は(」(多くがあるかもしれないそれらの)運動の標的化さ筋肉のどれがリストにないことを確認する15,16,17,14,3,12,9,8 、7,18,4,2) "しかし、これは見つかった最初のものだけをチェックします。どのように一致する行をすべてexercise_targetedmusclesからチェックすることができますか?MySQL:NOT INを使用してジョイントテーブルの複数の行をプライマリテーブルと比較していますか?

ありがとうございます!

答えて

0

はこれを試してみてください:

SELECT SQL_CALC_FOUND_ROWS e.* 
FROM exercises e 
WHERE NOT EXISTS 
(
    SELECT 1 
     FROM exercise_targetedmuscles em 
     WHERE em.exerciseID = e.exerciseID 
       AND em.targetedMuscleID IN(15,16,17,14,3,12,9,8,7,18,4,2) 
     AND em.isPrimary = 1 
) 
GROUP BY e.exerciseID 
ORDER BY e.name ASC 
+0

はありがとうございました!それはそれを置く素晴らしい方法です。役立つ知識をもう一度ありがとう。 私がしなければならなかった1つの非常に小さな変更は、2番目の "FROM"の後ろに "em"を追加してエイリアスを付けることでした。そうでなければ、完璧です。 – Garrett

+0

@Garret:エイリアスを追加しました.. Thx – Chandu

関連する問題