+-------------------------+
| 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
+-------------------------+
Run Code Online (Sandbox Code Playgroud)
我想通过两个标准在这个表中找到重复的记录.首先是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
+-------------------------+
Run Code Online (Sandbox Code Playgroud)
第二个重复组应如下所示:
GROUP2*
+-------------------------+
| 002 | 222 | NAME5 | 5
| 002 | null | NAME6 | 6
+-------------------------+
Run Code Online (Sandbox Code Playgroud)
我怎么能用mysql查询找到这个组?如果我找到重复记录,我在表中设置任何重复记录的grouID***.
我尝试了这个,但没有显示所有重复.
select sku, upc
from inv
WHERE sku is not null
GROUP BY sku, upc HAVING count(sku) > 1 OR count(upc) > 1
Run Code Online (Sandbox Code Playgroud)
这是SQL架构:
http://sqlfiddle.com/#!2/4d760/2
此查询返回空结果.
如果您有 2 个查询执行您想要的操作并返回相同的列,您可以使用 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);
Run Code Online (Sandbox Code Playgroud)
(我现在必须回去工作了,但希望这能让你走上解决问题的道路)
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |