次の表ははるかに大きいですが、質問を簡単にするためにサイズが小さくなっています
表1-exercise_rolladex
Exercise_ID | Exercise_Name
---------------------------
1 Pushups
2 Turkish Get Ups
3 Squats
4 Ice Skater
表2-exercise_planes
Exercise_Plane_ID | Exercise_Plane
----------------------------------
1 Sagittal
2 Frontal
3 Transverse
表3-exercise_has_planes
Exercise_ID | Exercise_Plane_ID
-------------------------------
1 1
2 1
2 2
2 3
3 1
4 2
4 3
私の質問は次のとおりです。Exercise_Plane_ID= 1およびExercise_Plane_ID = 2を持つ各演習のExercise_IDを見つけることができるクエリを構成するにはどうすればよいですか。言い換えれば、矢状面と前頭面の両方の運動面を持つエクササイズを見つけます。
正しいクエリ
SELECT e.Exercise_Name, p.Exercise_Plane
FROM exercise_rolladex e
INNER JOIN exercise_has_planes h ON h.Exercise_ID=e.Exercise_ID
INNER JOIN exercise_planes p ON p.Exercise_Plane_ID=h.Exercise_Plane_ID
WHERE p.Exercise_Plane_ID IN(2,1)
GROUP BY e.Exercise_ID
HAVING COUNT(DISTINCT h.Exercise_Plane_ID ) >= 2
フォローアップの質問を更新する場合、除外を含めるにはどうすればよいですか?たとえば、plane_id 2と3の演習を見つけますが、plane_id 1の演習は除外します(正しい結果は「IceSkater」です)。
私は先に進んで、自分の質問に答えました。
SELECT e.Exercise_Name, p.Exercise_Plane
FROM exercise_rolladex e
INNER JOIN exercise_has_planes h ON h.Exercise_ID=e.Exercise_ID
INNER JOIN exercise_planes p ON p.Exercise_Plane_ID=h.Exercise_Plane_ID
WHERE p.Exercise_Plane_ID IN(2,3)
AND e.Exercise_ID NOT IN
(SELECT Exercise_ID FROM exercise_has_planes WHERE Exercise_Plane_ID='1')
GROUP BY e.Exercise_ID
HAVING COUNT(DISTINCT h.Exercise_Plane_ID ) >= 2
ブラウンストーン氏のおかげで、別の質問から答えました。1つの値に基づいてアイテムを除外するSQLクエリ
あなたはこのようなことをすることができます、これはあなたの与えられた入力IDでプランIDをチェックし、カウントが複数を返す場合は各エクササイズグループのカウントを除外しますそれはエクササイズに飛行機があることを意味します運動中
SELECT e.Exercise_Name,
p.Exercise_Plane
FROM exercise_rolladex e
INNER JOIN exercise_has_planes h ON h.Exercise_ID=e.Exercise_ID
INNER JOIN exercise_planes p ON p.Exercise_Plane_ID=h.Exercise_Plane_ID
WHERE p.Exercise_Plane_ID IN(2,1)
GROUP BY e.Exercise_ID
HAVING COUNT(DISTINCT h.Exercise_Plane_ID ) >= 2
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加