通过多个条件在表格中查找重复记录

5
+-------------------------+
| SKU  |  UPC  |   NAME   | INVID
+-------------------------+
| 001  |  111  |   NAME1  |  1
| 001  |  null |   NAME2  |  2
| 0-1  |  111  |   NAME3  |  3
| -01  |  111  |   NAME4  |  4
| 002  |  222  |   NAME5  |  5
| 002  |  null |   NAME6  |  6
| 003  |  333  |   NAME7  |  7
+-------------------------+

我希望能够通过两个条件在这个表格中找到重复的记录。第一个条件是SKU,第二个条件是UPC。在这种情况下,重复的记录是[1,2,3,4]和[5,6]。 行[1,2]是重复的,因为SKU号码匹配。行[1,3,4]是重复的,因为UPC号码匹配。 第一个重复组应该看起来像这样:

GROUP1*

+-------------------------+
| 001  |  111  |   NAME1  |  1
| 001  |  null |   NAME2  |  2
| 0-1  |  111  |   NAME3  |  3
| -01  |  111  |   NAME4  |  4
+-------------------------+

第二个重复组应该像这样: GROUP2*
+-------------------------+
| 002  |  222  |   NAME5  |  5
| 002  |  null |   NAME6  |  6
+-------------------------+

如何使用mysql查询找到这些组? 如果我发现重复的记录,我会在表中的任何重复记录中设置grouID***。

我尝试过这个,但不显示所有重复项。

select sku, upc
from inv
WHERE sku is not null 
GROUP BY sku, upc HAVING count(sku)  > 1 OR count(upc)  > 1

这是SQL模式: http://sqlfiddle.com/#!2/4d760/2 这个查询返回空结果。

1
那个 SQL Fiddle 网站对于 SQL 相关问题非常棒,感谢你介绍它。 - Martin Lyne
2个回答

0
如果您有两个查询可以完成您想要的操作并返回相同的列,您可以使用 UNION 将它们合并为一个结果集。
但是这可能会包含重复记录(出现在两个重复查询中的记录)。
编辑:或者使用子查询。
select * from inv where upc in (select upc from inv group by upc having count(upc) > 1) 
union
select * from inv where sku in (select sku from inv group by sku having count(sku) > 1);

我现在得回去工作了,但希望这能为你解决问题指明方向。


选择 sku、upc 和 count(sku) 从 inv 表中 WHERE sku 不为空 按 sku 分组 HAVING count(sku) > 1 UNION 选择 sku、upc 和 count(upc) 从 inv 表中 WHERE sku 不为空 按 upc 分组 HAVING count(upc) > 1,但这不会返回正确的结果。 - dido
这不是完全匹配(抱歉,我得走了),但它可能有所帮助:select * from inv where upc in (select upc from inv group by upc having count(upc) > 1) union select * from inv where sku in (select sku from inv group by sku having count(sku) > 1); - Martin Lyne

0

这里有一个查询,可以将重复的条目显示为单个结果:

select distinct i1.*
  from inv i1, inv i2
  WHERE i1.sku is not null AND 
    (i1.sku = i2.sku OR i1.upc = i2.upc) AND i1.idinv != i2.idinv
  ORDER BY idinv

这是通过将表与自身连接并查找不同的匹配来实现的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接