次のテーブルがあります:
Person、{"Id"、 "Name"、 "LastName"}
Sports、{"Id" "Name"、 "Type"}
SportsPerPerson、{"Id"、 "PersonId"、 "SportsId"}
私のクエリでは、特定のスポーツを行使するすべての人を取得したいのに対し、私はスポーツの「名前」属性しか使用できません。正しい行を取得するために、次のクエリを見つけました。
SELECT *
FROM Person
WHERE Person.Id in
(
SELECT SportsPerPerson.PersonId FROM SportsPerPerson
INNER JOIN Sports on SportsPerPerson.SportsId = Sports.Id
WHERE Sports.Name = 'Tennis'
)
AND Person.Id in
(
SELECT SportsPerPerson.PersonId FROM SportsPerPerson
INNER JOIN Sports on SportsPerPerson.SportsId = Sports.Id
WHERE Sports.Name = 'Soccer'
)
また
SELECT *
FROM Person
WHERE Id IN
(SELECT PersonId FROM SportsPerPerson WHERE SportsId IN
(SELECT Id FROM Sports WHERE Name = 'Tennis'))
AND Id IN
(SELECT PersonId FROM SportsPerPerson WHERE SportsId IN
(SELECT Id FROM Sports WHERE Name = 'Soccer'))
今私の質問は、このクエリを書くためのより簡単な方法はありませんか?「テニス」と「サッカー」をプレイする人が必要なため、ORだけを使用しても機能しません。ただし、値が同じ行にないため、ANDを使用しても機能しません。