2014-02-15 46 views
0

我有一张表,其中有多个基于多列的重复数据。我想出了这个查询查找所有重复的行如何根据多个列更新数据库中的一组重复行

select * 
from polls 
group by server_id, product_id, poll_date 
having count(*) > 1; 

如何更新这些结果,并设置“updated_by”字段为“admin”。

我试着这样做,但它不会对我的帮助工作:(

update polls 
set updated_by='admin' 
group by server_id, product_id, poll_date 
having count(*) > 1; 

感谢

+0

嗨。你可以给sql代码创建你的表并插入一些示例行? –

回答

0

你应该能够加入您的SELECTUPDATE

UPDATE `polls` AS `p1` 
INNER JOIN (
    SELECT * 
    FROM `polls` 
    GROUP BY `server_id`, `product_id`, `poll_date` 
    HAVING COUNT(*) > 1 
) AS `p2` 
    ON `p2`.`server_id` = `p1`.`server_id` 
    AND `p2`.`product_id` = `p1`.`product_id` 
    AND `p2`.`poll_date` = `p1`.`poll_date` 
SET `p1`.`updated_by` = 'admin'; 

当然最好是直接加入主键(如果有的话)

+0

我得到这个错误:错误1052(23000):字段列表中的'updated_by'不明确 – Candice

+0

哦,对不起,我的不好。当然,我们必须指定哪个表应该用于更新。我更新了我的答案。 – Fleshgrinder

+0

谢谢你的工作! – Candice

相关问题