【问题标题】:Update records in table having count>1更新表中计数> 1的记录
【发布时间】:2016-06-10 23:06:12
【问题描述】:

当有多个字段A和字段B相同的记录时,我想标记表中的记录。选择当然很简单:

Select Count(*) from Table group by FieldA,FieldB having Count(*)>1

现在我想做一个更新并将 FieldA 和 FieldB 设置为 NULL 仅用于这些记录。我认为这是某种“加入”,但这不是我非常熟悉的东西。有没有一些相当简单的方法来做到这一点?

【问题讨论】:

    标签: mysql count sql-update


    【解决方案1】:

    这是一种方法,使用具有 3 个字段的临时表:MIN(id) 字段,其中 idTable 中的唯一键或主键,FieldAFieldB

    CREATE TEMPORARY TABLE tmp_fix AS
    SELECT MIN(id) AS id, FieldA, FieldB 
    FROM Table GROUP BY FieldA, FieldB having Count(*)>1;
    

    然后我们可以更新原始的Table,将所有重复的FieldA, FieldB 设置为NULL,除了id 最低的那个(我们保存在tmp_fix 表中):

    UPDATE Table t 
    LEFT JOIN tmp_fix f ON t.FieldA = f.FieldA AND t.fieldB = f.FieldB
    SET t.FieldA = NULL, t.fieldB = NULL
    WHERE t.id <> f.id;
    

    在尝试此操作之前,您可能需要复制Table

    【讨论】:

    • 谢谢,当我看到这个时,我意识到我想要做的是将第一个欺骗字段单独留下,其余的将第一个欺骗字段的 id 传递给字段中的其他人,例如 '匹配记录'。有没有办法修改上述内容来做到这一点?上面的看起来lke ti会重新设置所有的,而变化实际上是用原始dupe的ID更新原始dupe之后的所有记录。
    • 没错,它按照您的要求进行了操作,但我有一种预感,您可能想要这个。我更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多