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

如何用SQL判断数据表中两列是否为一一对应关系?

检查SQL表中A、B列的一一对应关系

要识别A列与B列的对应情况,核心思路是统计每个A值对应的不同B值数量,以下是几种实用的SQL查询方案:

1. 查看所有A值的B列对应情况

这个查询会返回每个A值对应的不同B值数量,以及所有关联的B值列表,能快速掌握整体对应关系:

SELECT 
    A,
    COUNT(DISTINCT B) AS distinct_b_count,
    GROUP_CONCAT(DISTINCT B) AS corresponding_b_values
FROM 
    your_table_name
GROUP BY 
    A;

针对你的示例数据,结果会显示:

  • Cat A:1个B值(asd)
  • Cat B:2个B值(dfg、ghj)
  • Cat C:1个B值(ggh)
  • Cat D:3个B值(ertrty、tyutyu、tuuiy)

2. 筛选符合“一一对应”的A值

如果只需要找出每个A仅对应唯一B的记录,在上述查询基础上添加HAVING条件即可:

SELECT 
    A,
    GROUP_CONCAT(DISTINCT B) AS corresponding_b_value
FROM 
    your_table_name
GROUP BY 
    A
HAVING 
    COUNT(DISTINCT B) = 1;

执行后会返回Cat A和Cat C这两个符合条件的结果。

3. 定位不符合一一对应的A值及关联B值

要找出存在多个B值对应的A,只需调整HAVING条件:

SELECT 
    A,
    COUNT(DISTINCT B) AS distinct_b_count,
    GROUP_CONCAT(DISTINCT B) AS corresponding_b_values
FROM 
    your_table_name
GROUP BY 
    A
HAVING 
    COUNT(DISTINCT B) > 1;

这个查询会返回Cat B、Cat D这类存在多B对应情况的A值,方便进一步排查数据问题。

4. 查看每行数据对应的A列B值分布

如果需要直观看到每一行所属的A值是否符合一一对应,可以用窗口函数:

SELECT 
    *,
    COUNT(DISTINCT B) OVER (PARTITION BY A) AS distinct_b_count_for_a
FROM 
    your_table_name;

结果中distinct_b_count_for_a为1的行,属于符合一一对应的A组;大于1的则属于不符合的组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:05:28