У меня есть следующие таблицы:
Person, {"Id", "Name", "LastName"}
Спорт, {"Id", "Имя", "Тип"}
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'
)
OR
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'))
Теперь мой вопрос: нет ли более простого способа написать этот запрос? Использование просто ИЛИ не сработает, потому что мне нужен человек, который играет в теннис и футбол. Но использование AND также не работает, потому что значения не находятся в одной строке.