php - 在 MySQL 中更新重复记录(仅限第一个 mtch)

标签 php mysql duplicates

CREATE TABLE IF NOT EXISTS `result` (
  `lead_id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(150) NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`lead_id`),
  UNIQUE KEY `lead_id` (`lead_id`),
  KEY `email` (`email`),
  KEY `active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

INSERT INTO result (email, active) VALUES
('aaa@xxx.com', 1),
('aaa@xxx.com', 0),
('aaa@xxx.com', 0),
('aaa@xxx.com', 1),
('bbb@xxx.com', 1),
('bbb@xxx.com', 1),
('bbb@xxx.com', 0);


lead_id | email       | active
---------------------------
1       | aaa@xxx.com | 1
2       | aaa@xxx.com | 0
3       | aaa@xxx.com | 0
4       | aaa@xxx.com | 1
5       | bbb@xxx.com | 1
6       | bbb@xxx.com | 1
7       | bbb@xxx.com | 0

我需要更新表格,以便只有一行或任何一组匹配的电子邮件地址处于事件状态

我正在努力编写查询来执行此操作。哪一行都没有关系。结果看起来像这样

lead_id | email       | active
---------------------------
1       | aaa@xxx.com | 1
2       | aaa@xxx.com | 0
3       | aaa@xxx.com | 0
4       | aaa@xxx.com | 0
5       | bbb@xxx.com | 1
6       | bbb@xxx.com | 0
7       | bbb@xxx.com | 0

谢谢你的建议

最佳答案

对于任何没有最小值的 lead_id/email 组,以下方法将 active 设置为 0 lead_id 值并且也处于事件状态。 GROUP BY 子查询将有两条记录使用您的示例数据,lead_id 值为 15。然后将 result 表连接到此表,任何匹配子查询的记录都将其 active 值设置为 0 。这没关系,因为该值已经是 0,或者它是我们希望删除的副本。

UPDATE result AS r1
LEFT JOIN
(
    SELECT MIN(lead_id) AS min_lead_id, email, active
    FROM result
    WHERE active = 1
    GROUP BY email, active
) AS r2
    ON r1.lead_id = r2.min_lead_id AND r2.email = r2.email
SET r1.active = 0
WHERE r2.active IS NULL

关于php - 在 MySQL 中更新重复记录(仅限第一个 mtch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37803874/

相关文章:

php - 如何在 PHP 的 GD 库中为文本添加光晕或阴影?

php - 如何向远程数据库添加数据?

MySQL 按时间过滤数据库查询并查找重复项

mysql - 列中每个重复项的递增计数器

php - Xdebug : [Step Debug] Could not connect to debugging client. 尝试 : localhost:9003 (fallback through xdebug. client_host/xdebug.client_port) :-(

mysql - 如何在 MySQL 表中存储 php 对象?

php - 通过CURL发送ajax请求

python - pymysql - pymysql.err.InternalError : 1054, 用户输入字符串用作列名

mysql - 返回两个不同表中相同成员的 SUM 值

python - 如何检查特定 Pandas 数据框列中的值是否唯一