我正在创建一个简单的数据库,它可以让我跟踪斯诺克比赛的结果,从而在球员之间产生正面交锋的结果。目前我有 3 个表:(Player, Fixture, Result)
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 之间的所有行。目前我的查询是:
SELECT *
FROM Result
WHERE PlayerID IN (1,3);
这将返回结果表的前 3 行 - 当我只查找前 2 行时,因为它们共享相同的 FixtureID。有没有一种简单的方法可以从此查询结果中删除第三行,或者我应该重新考虑我的数据库设计?任何帮助将不胜感激。
最佳答案
一种解决方案是使用 GROUP BY 查询,按 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
)
关于mysql - SQL查询返回列值多次出现的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34254637/