【发布时间】:2023-01-15 10:14:51
【问题描述】:
我正在寻找这个问题的解决方案几个小时,但没有运气。我有一个锻炼表如下。锻炼表中的每个项目都可以有多个目标肌肉,这些目标肌肉列在“目标肌肉”表中。
锻炼表:
| id |
|---|
| 1 |
| 2 |
目标肌肉表:
| id | muscle_key | workout_id |
|---|---|---|
| 1 | a | 1 |
| 2 | b | 1 |
| 3 | c | 1 |
| 4 | a | 2 |
| 5 | b | 2 |
我需要获取锻炼表中的所有项目,这些项目完全匹配给定集合中的所有目标肌肉键,不多也不少。例如,给定一组肌肉键:
(a,b)
所需的输出将是:
| id |
|---|
| 2 |
不应该选择 workout id = 1 的行,因为它包含一个额外的肌肉键 (c)。
我正在使用以下查询:
SELECT id
FROM workouts
LEFT JOIN target_muscles ON workouts.id = target_muscles.workout_id
WHERE target_muscles.muscle_key IN (a,b)
GROUP BY workouts.id
HAVING COUNT(DISTINCT target_muscles.muscle_key) = 2
上面的查询也返回了 workout id = 1,而不仅仅是 2。我怎样才能做到这一点?
任何帮助表示赞赏。
【问题讨论】:
-
“不应选择 workout id = 1 的行”但我确实看到 3 行 workout_id=1 ?