我有以下表结构(在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
。
任何人都可以帮助我吗?我正在尝试实现逻辑,但我被卡住了。
非常感谢您的帮助。
感谢。
答案 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)
上设置索引。
如果您的表格为InnoDB
且docId
为PRIMARY KEY
,则您应在(code)
上设置索引。