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

如何在SQL中实现对称配对输出?缺失配对默认Score为0

实现双向配对补全的SQL方案

可以实现,下面给出两种可行的实现方法:

方法一:补充缺失的反向配对记录

这种方法先保留原表所有记录,再找出存在正向配对但反向缺失的组合,补充Score为0的记录,最终合并结果。

WITH missing_reverse_pairs AS (
    -- 筛选出需要补充的反向配对
    SELECT 
        t1.Type2 AS Type1,
        t1.Type1 AS Type2,
        0 AS Score
    FROM your_table t1
    WHERE NOT EXISTS (
        -- 检查反向配对是否已存在
        SELECT 1 
        FROM your_table t2
        WHERE t2.Type1 = t1.Type2 AND t2.Type2 = t1.Type1
    )
)
-- 合并原表记录与补充的缺失记录
SELECT Type1, Type2, Score FROM your_table
UNION ALL
SELECT Type1, Type2, Score FROM missing_reverse_pairs
ORDER BY Type1, Type2;

方法二:生成所有必要双向配对,左连接补全Score

这种方法先提取所有出现过的Type值,生成所有存在至少一个方向配对的双向组合,再通过左连接原表获取Score,缺失项用0填充。

WITH unique_types AS (
    -- 提取所有出现过的Type值
    SELECT Type1 AS type FROM your_table
    UNION
    SELECT Type2 AS type FROM your_table
),
required_pairs AS (
    -- 生成所有需要的双向配对(仅保留原表存在至少一个方向的组合)
    SELECT 
        ut1.type AS Type1,
        ut2.type AS Type2
    FROM unique_types ut1
    CROSS JOIN unique_types ut2
    WHERE EXISTS (
        SELECT 1 
        FROM your_table t
        WHERE (t.Type1 = ut1.type AND t.Type2 = ut2.type) 
           OR (t.Type1 = ut2.type AND t.Type2 = ut1.type)
    )
)
-- 左连接原表,补全缺失的Score为0
SELECT 
    rp.Type1,
    rp.Type2,
    COALESCE(t.Score, 0) AS Score
FROM required_pairs rp
LEFT JOIN your_table t 
    ON rp.Type1 = t.Type1 AND rp.Type2 = t.Type2
ORDER BY rp.Type1, rp.Type2;

注意事项

  • 将代码中的your_table替换为你的实际表名即可运行。
  • 方法一更高效,仅处理需要补充的记录;方法二更灵活,适合需要确保所有双向配对都被覆盖的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:51:18