【问题标题】:How do I mark duplicates in a given group in MySQL?如何在 MySQL 的给定组中标记重复项?
【发布时间】:2010-10-27 06:47:42
【问题描述】:

我有以下表结构(在 MySQL 中):

DocID, Code, IsDup, DopOf

,其中DocID 是唯一的。

价值观是这样的:

1,AAAA,无,无 2,AAAA,无,无 3,AAAA,无,无 4,BBBB,无,无 5,CCCC,无,无 6,CCCC,无,无

我想要的是编写一个可以更新表并给出所需结果的过程:

1,AAAA,0,0 2,AAAA,1,1 3,AAAA,1,1 4,BBBB,0,0 5,CCCC,0,0 6,CCCC,1,5

IsDupCode的基础上显示Doc是否重复, 而DupOf表示原来的DocId

有人可以帮助我吗?我正在尝试实现逻辑,但我被卡住了。

我们将非常感谢您的帮助。

谢谢。

【问题讨论】:

    标签: sql mysql logic procedure


    【解决方案1】:
    UPDATE  table t
    JOIN    (
            SELECT  code, MIN(docId) AS firstdoc
            FROM    table
            GROUP BY
                    code
            ) q
    ON      t.code = q.code
    SET     t.isDup = NOT (t.docId = q.firstdoc), 
            t.dupOf = CASE WHEH t.docId = q.firstdoc THEN 0 ELSE q.firstDoc END
    

    如果您的表是MyISAM,您应该在(code, docId) 上有一个索引。

    如果您的表是InnoDB 并且docIdPRIMARY KEY,那么您应该在(code) 上有一个索引。

    【讨论】:

    • 谢谢 Quassnoi... 你的回答真的很有帮助。 :-)
    • 错字WHEH 应为WHEN。查询对我来说很好。我更喜欢在我的情况下使用u.dup_of = CASE WHEN u.id = p.first_id THEN NULL ELSE p.first_id END
    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 2010-12-22
    • 2020-12-31
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2021-10-14
    • 2021-11-10
    相关资源
    最近更新 更多