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

发布于 2024-07-21 23:27:47 字数 530 浏览 5 评论 0原文

我有以下表结构(在 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 是否重复代码DupOf 表示原始DocId

有谁能够帮助我? 我试图实现这个逻辑,但我被困住了。

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

谢谢。

I have the following table structure (in MySQL):

DocID, Code, IsDup, DopOf

, where DocID is Unique.

Values are like :

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

What I want is to write a procedure which can update the table and give the desired result as:

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 shows whether the Doc is duplicate or not on the basis of Code,
and DupOf indicates the original DocId.

Can anybody help me? I'm trying to implement the logic, but I'm stuck.

Your help would be highly appreciated.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晌融 2024-07-28 23:27:47
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) 上有一个索引。

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

If your table is MyISAM, you should have an index on (code, docId).

If your table is InnoDB and docId is a PRIMARY KEY, you should have an index on (code).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文