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

如何使用Oracle SQL(不含PL/SQL)生成球队单循环对阵赛程表

Oracle纯SQL实现单循环赛制赛程生成

需求为不使用PL/SQL语句块,仅通过纯Oracle SQL生成单循环赛程,保证每支球队和其余所有球队各对阵1次,无重复对阵。
示例输入为存储球队名称的表,包含T1、T2、T3、T4四支球队,输出为所有不重复的对阵组合。

实现思路

单循环对阵的核心是去重:避免同时出现「A对B」和「B对A」的重复记录。只要给每支球队分配全局唯一的排序序号,通过自连接只保留「左侧球队序号小于右侧球队序号」的组合,就能覆盖所有不重复的对阵关系,全程不需要写循环或PL/SQL块。

实现代码

-- 测试用CTE构造示例球队数据,实际使用时可替换为自己的业务表
WITH teams(team) AS (
    SELECT 'T1' FROM dual UNION ALL
    SELECT 'T2' FROM dual UNION ALL
    SELECT 'T3' FROM dual UNION ALL
    SELECT 'T4' FROM dual
),
team_with_sort AS (
    SELECT 
        team,
        ROW_NUMBER() OVER(ORDER BY team) AS sort_id -- 按球队名排序生成唯一序号,可按需调整排序规则
    FROM teams
)
SELECT 
    a.team AS "Team",
    b.team AS "Opponent"
FROM team_with_sort a
INNER JOIN team_with_sort b 
    ON a.sort_id < b.sort_id -- 只保留序号更小的队在前的组合,避免重复对阵
ORDER BY a.sort_id, b.sort_id;

运行结果

执行上述代码后输出结果和示例完全一致:

TeamOpponent
T1T2
T1T3
T1T4
T2T3
T2T4
T3T4

注意事项

  • 如果你已有存储球队信息的业务表,直接删除示例里的teams CTE,把后续引用的teams替换成自己的表名即可。
  • 排序规则可以按需调整,比如需要按球队注册时间、抽签顺位排序,只需要修改ROW_NUMBER()窗口函数里的ORDER BY字段,只要保证每支球队的sort_id唯一,就不会出现漏赛、重复对阵的问题。
  • 所有逻辑均为标准Oracle SQL语法,无PL/SQL代码,执行效率高,支持任意数量的球队赛程生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:06:21