mysql - SQL查询返回列值多次出现的行

标签 mysql sql database-design

我正在创建一个简单的数据库,它可以让我跟踪斯诺克比赛的结果,从而在球员之间产生正面交锋的结果。目前我有 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/

相关文章:

Mysql 从表树中仅选择子项

mysql - SQL,为什么显式查找数据比 SELECT * 更快

php - 有没有更简单的方法来执行插入查询到 2 行?

php - 如何使用 CodeIgniter 在 URL 中传递 MySQL 日期时间值?

mysql - GROUP_CONCAT 具有不同分隔符的多个字段

sql - 获取下一个未使用的ID的最有效方法

sql - 是否可以在一条语句中始终更新一列并有条件地更新另一列?

c++ - sqlite3错误: no such table: when checking if table exists

mysql - SQL - "No Unique Constraint Matching Given Keys"尽管存在主键

database - 如何呈现数据库设计?