php - 通过多个条件查找表中的重复记录

标签 php mysql

+-------------------------+
| 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 编号匹配。 第一个重复组应如下所示:

第 1 组*

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

第二个重复组应该是这样的:

第 2 组*

+-------------------------+
| 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

此查询返回空结果。

最佳答案

这是一个将重复条目显示为单个结果的查询:

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

这是实现将表与自身连接并寻找不同的匹配。

关于php - 通过多个条件查找表中的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068375/

相关文章:

php - bind_param 错误,其中提供了正确数量的参数?

mysql - 无法在 ubuntu 12.10 中安装 mysql-workbench

php - 在到期日通过电子邮件通知

php - 连接到 Google 应用引擎上的远程 MySQL 数据库

php - 需要在我的网站上显示带有特定标签的 flickr 图片

php - Laravel 5.6 ErrorException 尝试获取非对象的属性 'slug'

php - 使用 php 下拉列表

javascript - 选择后显示输入元素

php - 两个 MySQL 命令(SELECT to View),但只有一个显示输出

mysql - 使用 shell 脚本向 MYSQL 表中插入数据