#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 используется для включения только тех групп, которые имеют все (а не только некоторые) мышцы.