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
相关产品推荐
相关产品推荐

