我正在创建一个简单的数据库,允许我跟踪斯诺克的结果,产生球员之间的直接结果。目前我有3张桌子:(球员,赛程,结果)
PlayerID PlayerName
1 Michael Abraham
2 Ben Mullen
3 Mark Crozier
FixtureID Date TableNo Group
1 07/12/2015 19:00:00 12 0
2 08/12/2015 12:00:00 9 0
ResultID FixtureID PlayerID FramesWon
1 1 1 3
2 1 3 1
3 2 1 5
4 2 2 1
我想要一个查询,它返回结果表中发生在玩家1和3之间的fixture的所有行。当前我的查询是:
SELECT *
FROM Result
WHERE PlayerID IN (1,3);
这将返回结果表的前3行-当我只查找前2行时,因为它们共享相同的FixtureID。有没有一种简单的方法可以从这个查询结果中删除第三行,或者我应该重新考虑我的数据库设计?任何帮助都将不胜感激。
最佳答案
一种解决方案是使用按查询分组、按FixtureID分组和计算每个FixtureID的行数。此查询将选择玩家1和3的所有FixtureID:
select
FixtureID
from
Results
where
PlayerID IN (1,3)
group by
FixtureID
having
count(*)=2
然后,要从结果表中获取记录,可以使用以下查询:
select *
from Results
where FixtureID IN (
select FixtureID
from Results
where PlayerID IN (1,3)
group by FixtureID
having count(*)=2
)