我几乎完成了一个涉及客户和产品的项目,但最后才发现由于键入错误而存在重复记录,销售人员多次将同一客户添加到数据库中。
我需要做的是通过比较客户名称和邮政编码来识别重复记录并合并产品,以便更新后的产品字段与适用于他们的所有产品一致,但只有一条客户记录存在。
为了解释这一点,我整理了一个小例子。
DROP TABLE IF EXISTS `tblProducts`;
CREATE TABLE `tblProducts` (
`ID` int(10) DEFAULT NULL,
`Customer` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Postcode` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Products` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `tblProducts` VALUES ('1', 'Bradford', 'BR1 2HJ', '111&222&444');
INSERT INTO `tblProducts` VALUES ('2', 'Bradford', 'BR1 2HJ', '222');
INSERT INTO `tblProducts` VALUES ('3', 'Tanner', 'TE4 9PO', '777&333');
INSERT INTO `tblProducts` VALUES ('4', 'Smythe', 'SM3 8KO', '111&222');
INSERT INTO `tblProducts` VALUES ('5', 'Francis', 'FL2 6HG', '444&333');
INSERT INTO `tblProducts` VALUES ('6', 'Tanner', 'TE4 9PO', '555');
INSERT INTO `tblProducts` VALUES ('7', 'Peters', 'PE4 4PE', '444');
INSERT INTO `tblProducts` VALUES ('8', 'Jeffrey', 'JE9 4JK', '444&555&888');
INSERT INTO `tblProducts` VALUES ('9', 'Barnes', 'BA5 5AB', '999');
INSERT INTO `tblProducts` VALUES ('10', 'Smythe', 'SM1 4GE', '888&777&222');
如果我们运行以下查询,您将看到我们有两个重复项,分别为 Bradford 和 Tanner。
SELECT Customer, Postcode, COUNT(*) FROM tblProducts group by Customer, Postcode having count(*) > 1
Customer Postcode COUNT(*)
Bradford BR1 2HJ 2
Tanner TE4 9PO 2
单独的重复记录是:
Customer Postcode Products
Bradford BR1 2HJ 111&222&444
Bradford BR1 2HJ 222
Tanner TE4 9PO 777&333
Tanner TE4 9PO 555
我需要运行 MySQL 查询来“合并客户和邮政编码计数 > 1 的产品”,如上所示,因此最终结果将是:
Customer Postcode Products
Bradford BR1 2HJ 111&222&444
Tanner TE4 9PO 777&333&555
请注意,第一个记录中只有一个 222 实例,因为 222 已经存在。重复的记录将从 MySQL 表中删除,从而只剩下一条记录。
我必须承认,我原以为这对 MySQL 来说很容易实现,并且花了很长时间研究合并行、合并字段、删除重复项,但没有找到任何似乎有特别帮助的东西。
如果有帮助,请链接到 jsfiddle:http://sqlfiddle.com/#!9/966550/4/0
有人可以帮我吗,因为我被困住了。
非常感谢,
抢
最佳答案
SELECT TP.Customer,TP.Postcode,TP.Products
FROM tblProducts TP
INNER JOIN
(
SELECT MIN(ID) ID FROM tblProducts GROUP BY Customer, Postcode
)INNERTABLE ON INNERTABLE.ID=TP.ID
您可以尝试上面的查询。
关于mysql - 如何合并 MySQL 表中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432758/