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

如何筛选含C罗或梅西的赛事并获取全部球队与球员数据?

解决思路与SQL实现

原SQL语句的问题在于,将参与者的筛选条件直接放在WHERE子句中,导致JOIN后的结果集仅保留了名字为ronaldo或messi的参与者记录,而非整个赛事的全部数据。

要实现需求,需要先筛选出C罗或梅西参与的所有赛事ID,再基于这些赛事ID关联获取对应的全部球队和球员数据,具体有两种常用写法:

方法一:子查询筛选目标赛事

SELECT *
FROM matches m
INNER JOIN teams t ON t.matches_matchId = m.matchId
INNER JOIN participants p ON p.matches_matchId = m.matchId
WHERE m.matchId IN (
    -- 先获取包含C罗或梅西的所有赛事ID
    SELECT DISTINCT matches_matchId
    FROM participants
    WHERE name IN ('ronaldo', 'messi')
);

方法二:CTE(公共表表达式)筛选目标赛事

如果需要更清晰的逻辑拆分,可以用CTE先定义目标赛事集合:

WITH target_matches AS (
    SELECT DISTINCT matches_matchId
    FROM participants
    WHERE name IN ('ronaldo', 'messi')
)
SELECT *
FROM matches m
INNER JOIN target_matches tm ON m.matchId = tm.matches_matchId
INNER JOIN teams t ON t.matches_matchId = m.matchId
INNER JOIN participants p ON p.matches_matchId = m.matchId;

关键说明

  • 子查询/CTE中的DISTINCT用于去重,避免同一赛事因C罗和梅西同时参与而被多次返回,提升查询效率。
  • 主查询仅针对筛选出的赛事ID进行关联,因此能返回这些赛事的全部球队信息和所有参赛球员数据,而不仅仅是C罗或梅西的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:33:17