我有以下表格:
人,{ “ID”, “姓名”, “姓氏”}
体育,{ “ID”, “姓名”, “类型”}
SportsPerPerson,{ “ID”, “PersonId”,“SportsId”}这个SQL查询可以被简化吗?
对于我的查询,我希望获得所有擅长某个特定体育项目的人员,而我只有体育“名称”属性可供我处理。要检索我已经想通了以下查询正确的行:
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'))
现在的问题是,是不是有写这个查询更简单的方法?只用OR就行不通,因为我需要玩'网球'和'足球'的人。但使用AND也不起作用,因为这些值不在同一行。
这一个伎俩:] – Bas 2010-05-11 12:11:47