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

SQL表重复行排查:查询int_pn重复但ext_pn不一致的行

解决你的SQL查询需求

没问题,我来帮你搞定这个问题!你需要找出表中那些int_pn出现多次,但对应ext_pn不一致的行,对吧?下面给你两种可行的实现方法,逻辑清晰而且容易理解:

方法一:子查询筛选目标分组

这种方式用子查询先锁定有问题的int_pn,再提取对应行:

SELECT warehouse, int_pn, ext_pn
FROM your_table_name  -- 记得替换成你的实际表名
WHERE int_pn IN (
    SELECT int_pn
    FROM your_table_name
    GROUP BY int_pn
    HAVING COUNT(DISTINCT ext_pn) > 1
);

方法二:CTE(公共表表达式)更直观

如果想要逻辑拆分得更清楚,用CTE会更易读:

WITH problematic_int_pns AS (
    -- 先找出存在多个不同ext_pn的int_pn
    SELECT int_pn
    FROM your_table_name
    GROUP BY int_pn
    HAVING COUNT(DISTINCT ext_pn) > 1
)
-- 再从原表中取出这些int_pn对应的所有行
SELECT warehouse, int_pn, ext_pn
FROM your_table_name
JOIN problematic_int_pns ON your_table_name.int_pn = problematic_int_pns.int_pn;

逻辑说明

  • 核心筛选逻辑:通过GROUP BY int_pn把数据按int_pn分组,然后用COUNT(DISTINCT ext_pn) > 1判断这个分组里的ext_pn是不是有多个不同的值——这就是你要找的存在拼写错误的目标分组。
  • 主查询部分:把原表和筛选出来的目标int_pn关联,就能得到所有属于这些分组的行,正好是你期望的结果。

用你提供的示例数据测试的话,这两个查询都会返回:

warehouse | int_pn  | ext_pn
----------|---------|--------
1         | ABC200  | XYZ021
2         | ABC200  | XYY021

完全匹配你的需求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:22:32