You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多表关联查询:获取指定球员参与的所有赛事列表(含首发/替补)

解决指定球员参与赛事的SQL查询方案

嗨,我来帮你搞定这个查询需求!根据你给出的三张表结构,我们可以通过合并两个独立的查询结果来获取目标数据——因为球员的首发和替补记录是互斥的,用UNION ALL来合并效率最高。

下面是直接可用的SQL语句:

SELECT 
    m.MatchID, 
    m.MatchDateTime, 
    '首发登场' AS ParticipationType
FROM matches m
INNER JOIN appearances a 
    ON m.MatchID = a.AppearanceMatchID
WHERE a.AppearancePlayerID = $id

UNION ALL

SELECT 
    m.MatchID, 
    m.MatchDateTime, 
    '替补登场' AS ParticipationType
FROM matches m
INNER JOIN substitutions s 
    ON m.MatchID = s.SubstitutionMatchID
WHERE s.SubstitutionPlayerIDIn = $id

ORDER BY m.MatchDateTime ASC;

代码说明:

  • 第一个查询块:从appearances表筛选出该球员的首发赛事,关联matches表获取赛事基础信息,同时标注参与类型为“首发登场”。
  • 第二个查询块:从substitutions表筛选出该球员的替补登场赛事,同样关联matches表并标注“替补登场”。
  • UNION ALL:因为题目明确同一球员不会在同一场赛事同时有两种记录,所以用UNION ALL替代UNION,跳过去重步骤提升查询效率。
  • ORDER BY:最后按赛事日期升序排列,满足“按日期顺序列出”的要求。

重要提示:

实际开发中,绝对不要直接将$id拼接到SQL语句中,这会引发SQL注入风险。请使用参数化查询(比如PHP PDO的绑定参数、Java PreparedStatement等)来传递$id值。

内容的提问来源于stack exchange,提问作者NiallFH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:58:15