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

如何通过自连接实现单列表中两两国家的对战组合查询?

用自连接实现国家两两组合查询

要实现你需要的两两国家组合查询,通过自连接搭配筛选条件就能完成,以下是两种可行方案:

方案1:不依赖原表顺序的组合查询

如果只需要所有不重复的两两组合,不关心前后顺序,可以直接通过字符串比较过滤重复项:

SELECT CONCAT(c1.country, ' vs ', c2.country) AS match_result
FROM country c1
JOIN country c2 ON c1.country != c2.country
WHERE c1.country < c2.country;

这个查询会返回所有两个不同国家的组合,每个组合仅出现一次,结果顺序由国家名称的字符串排序决定。

方案2:匹配示例顺序的组合查询

如果希望结果和你给出的示例顺序一致(原表中靠前的国家在前,靠后的国家在后),可以先给每条数据添加行号,再通过行号的大小关系做自连接:

SELECT CONCAT(c1.country, ' vs ', c2.country) AS match_result
FROM (
    -- 为原表数据添加行号,保留原始存储顺序
    SELECT country, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM country
) c1
JOIN (
    SELECT country, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM country
) c2 ON c1.rn < c2.rn;

ORDER BY (SELECT NULL)用于保留表中数据的原始顺序,c1.rn < c2.rn的条件确保原表中前面的国家只会和后面的国家组合,完全匹配你想要的结果形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:20:24