Выбор упражнений, включающих те же мышцы, что и указанное упражнение (две таблицы) - PullRequest
0 голосов
/ 01 октября 2011

два стола:

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

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

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

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

1 Ответ

0 голосов
/ 01 октября 2011

Использование HAVING для фильтрации ваших результатов включает в себя только те, у кого есть хотя бы нужные мышцы:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...