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

如何使用MySQL查询NAME字段重复但KEY字段值不同的记录?

查找MySQL中NAME重复且对应KEY存在差异的记录

我懂你要找的是什么——就是那些NAME字段重复出现,但同一个NAME对应的KEY字段有不一样的值的记录对吧?针对这个需求,我给你两种实用的查询方法,你可以根据自己的具体场景选择:

方法一:先筛选出有差异KEY的NAME,再关联取记录

这种方法先定位到那些存在多种不同KEY值的NAME,再把原表中这些NAME的所有记录都查出来,适合你想看到所有相关记录的场景:

SELECT t.*
FROM your_table t
JOIN (
    -- 先找出有至少两种不同KEY的NAME
    SELECT NAME
    FROM your_table
    GROUP BY NAME
    HAVING COUNT(DISTINCT `KEY`) > 1
) problematic_names ON t.NAME = problematic_names.NAME;

逻辑拆解:

  1. 子查询部分:通过GROUP BY NAME对NAME分组,用COUNT(DISTINCT \KEY`) > 1来筛选——只要某个NAME对应的KEY值有两种或以上不同的,就会被选中。这里用DISTINCT`是为了排除“同一KEY重复多次”的情况,只判断是否存在不同的KEY。
  2. 外层查询把原表和子查询的结果关联,就能拿到所有属于这些有问题NAME的记录,也就是你要找的目标数据。

方法二:直接判断每条记录是否存在同NAME不同KEY的其他记录

如果你想直接判断每条记录是否满足“同NAME下有其他不同KEY”的条件,用EXISTS的写法更直观:

SELECT t.*
FROM your_table t
WHERE EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.NAME = t.NAME
      AND t2.`KEY` != t.`KEY`
);

逻辑拆解:

这个查询会逐条检查原表的记录:如果当前记录的NAME,在表中存在另一条记录和它NAME相同但KEY不同,就把这条记录返回。比如你示例里的ID=0、2、3、4都会被返回,因为它们的NAME是A,且存在其他KEY不同的记录。

注意事项:

因为KEY是MySQL的保留关键字,所以在查询里必须用反引号`把它包起来,不然会触发语法错误哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:27:38