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

SQL查询需求:找出ID相同但名称不同的所有数据行

嘿,这问题我熟!要找出所有ID相同但对应name不一样的数据行,咱们可以用几种不同的SQL写法来实现,下面给你详细拆解:

解决方案:检索ID相同但name不同的行

核心思路是先定位那些关联了多个不同name值的ID,再从原表中取出这些ID对应的所有行。

方法1:子查询筛选目标ID(最直观的写法)

SELECT t.*
FROM your_table t
WHERE t.ID IN (
    SELECT ID
    FROM your_table
    GROUP BY ID
    -- 筛选出存在至少2个不同name的ID
    HAVING COUNT(DISTINCT name) > 1
);

为啥这么写?

  • 内层子查询通过GROUP BY ID把数据按ID分组,COUNT(DISTINCT name)会统计每个ID下不同name的数量,只要数量大于1,就说明这个ID有不同的name对应。
  • 外层查询直接用这些ID去匹配原表,就能拿到所有符合条件的行。

方法2:自连接实现(适合对性能敏感的场景)

如果你的数据集很大,担心子查询性能,试试自连接的方式:

SELECT DISTINCT t1.*
FROM your_table t1
JOIN your_table t2 
    ON t1.ID = t2.ID 
    AND t1.name != t2.name;

逻辑说明:

  • 把表和自己做连接,匹配条件是ID相同但name不同,这样能找出所有存在“同ID不同名”配对的行。
  • 加DISTINCT是为了避免同一行被多次重复返回(比如Diana和Daniel配对时,Diana会被查一次,Daniel和Diana配对时又会被查一次)。

用你的测试数据验证结果

你的测试数据是:

ID | name
45 | Alex
98 | Diana
32 | Peter
98 | Daniel
45 | Alex
23 | Bob
98 | Jake

执行上面的查询后,会得到以下结果:

ID | name
98 | Diana
98 | Daniel
98 | Jake

因为只有ID=98对应了多个不同的name,其他ID的name都是唯一的,所以不会被筛选出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:37:38