在SQL表问题中查找重复的行

时间:2018-01-16 10:46:14

标签: sql sql-server

我有一个包含重复数据的表。表中的字段有一些拼写错误,因此我试图找到此表中所有其他列没有相同信息的行。

例如

部分号码

warehouse   int_pn    ext_pn
=========   ======    ======
1           ABC100    XYZ001
2           ABC100    XYZ001
1           ABC200    XYZ021
2           ABC200    XYY021
3           ABC999    XYZ999

在上表中, int_pn ABC200存在于两个仓库(1和2)中,但在仓库2的 ext_pn 中存在拼写错误

我正在尝试列出 int_pn 出现多次的所有行但是有不同的 ext_pn

http://sqlfiddle.com/#!6/96248d/1

查询结果应返回

结果

warehouse   int_pn    ext_pn
=========   ======    ======
1           ABC200    XYZ021
2           ABC200    XYY021

我很难构建SQL查询来执行此操作

由于

2 个答案:

答案 0 :(得分:0)

您可以通过自我加入

来实现这一目标
SELECT p1.warehouse
    ,p1.int_pn
    ,p1.ext_pn
FROM partnumber AS p1
INNER JOIN partnumber AS p2 ON p1.int_pn = p2.int_pn
    AND p1.ext_pn != p2.ext_pn

演示:http://sqlfiddle.com/#!6/96248d/28

答案 1 :(得分:0)

您可以按int_pn对数据进行分组,然后计算ext_pn

的不同值

http://sqlfiddle.com/#!6/96248d/29

select warehouse, int_pn, ext_pn
from partnumber 
where int_pn in (
   select int_pn 
from partnumber
group by int_pn
having count(distinct ext_pn) >1)