Выбор упражнений, которые включают те же мышцы, что и указанное упражнение (две таблицы)

#mysql #select #join

#mysql #выберите #Присоединиться

Вопрос:

две таблицы:

  Exercises
    ---------
    Exercise ID 
    1

ExerciseTargettedMuscles
------------------------
exerciseID       muscleID
   1               10
   1               20
   1               30
  

Мне нужно захватить упражнения, которые включают все мышцы, на которые он нацелен.
итак, если упражнение a имеет exerciseID=1 и имеет muscleIDs = 10,20 и 30, то результатом запроса должны быть упражнения с (как минимум) muscleIDs = 10,20 и 30.

Что меня смущает, так это сравнение нескольких строк с несколькими. Способ, который работает в моей голове, — просто убедиться, что в основном упражнении не существует мышцы, которой нет в выбранных упражнениях. Как вы перебираете каждое из них, чтобы увидеть, нет ли его в выбранном упражнении?

Ответ №1:

Использование НЕОБХОДИМОСТИ фильтровать ваши результаты, чтобы включать только те, у которых есть хотя бы желаемые мышцы:

 select exerciseID
from ExerciseTargettedMuscles
where muscleID in (10, 20, 30)
group by exerciseID
having count(muscleID) = 3
  

3 Должно соответствовать количеству мышц.

ГДЕ приведены упражнения с любыми желаемыми мышцами. Затем они группируются в одну группу для каждого упражнения. Наконец, HAVING используется для включения только тех групп, которые имеют все (а не только некоторые) мышцы.