2009-05-19 36 views
1

我有(在MySQL)在以下表结构:如何在MySQL中给定组中标记重复项?

DocID, Code, IsDup, DopOf 

,其中DocID是独一无二的。

值是这样的:

​​

我想要的是写可更新表,并得到期望的结果的过程为:

 
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

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

您的帮助将不胜感激。

谢谢。

回答

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)

+0

感谢Quassnoi ...乌尔答案真的很有帮助。 :-) – 2009-05-20 05:50:41