如何在MySQL中的给定组中标记重复项?

时间:2009-05-19 10:07:19

标签: sql mysql logic procedure

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

DocID, Code, IsDup, DopOf

,其中DocID是唯一的。

值如:

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

我想要的是编写一个程序,它可以更新表并提供所需的结果:

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

IsDup根据Doc显示Code是否重复, 并且DupOf表示原始DocId

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

非常感谢您的帮助。

感谢。

1 个答案:

答案 0 :(得分:3)

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)上设置索引。

如果您的表格为InnoDBdocIdPRIMARY KEY,则您应在(code)上设置索引。