gpt4 book ai didi

mysql - 如何查找/删除同一行中的重复记录

转载 作者:行者123 更新时间:2023-11-29 04:57:54 25 4
gpt4 key购买 nike

是否可以查询同一行是否有重复的记录?

我试图找到一个解决方案,但我所能找到的只是检测到列中的重复字段,而不是行中的重复字段。

例如,假设我有一个包含行和项目的表:

| id | item1 | item2 | item3 | item4 | item5 | upvotes | downvotes |
--------------------------------------------------------------------
| 1 | red | blue | red | black | white | 12 | 5 |

所以我想看看是否可以进行查询以检测具有相同记录(在本例中为红色)的字段并删除它们,和/或如何重新设计我的结构以不允许重复。

谢谢。

最佳答案

经过重新设计:

你可以将布局重新设计成这样:

| id | item |

使用 (id, item) 作为主键,这将禁止对于给定的 id 有两次相同的 item

所以数据看起来像这样:

| id | item |
| 1 | red |
| 1 | blue |
...

试图插入一个| 1 | red | 再次抛出错误。

没有重新设计:

如果您不想更改布局,此查询将查找其中一个 fieldX 字段等于同一行的另一个 fieldX 的行:

SELECT t.id FROM (select 1) dummy
JOIN (SELECT id, item1 as item FROM table
UNION SELECT id, item2 as item FROM table
UNION SELECT id, item3 as item FROM table
UNION SELECT id, item4 as item FROM table
UNION SELECT id, item5 as item FROM table) t
GROUP BY t.id
HAVING count(*) < 5

(假设您有 5 个 fieldX 列。)

这实际上计算了每个 id 的不同 fieldX 值。如果计数与字段数不同,则存在重复。查询返回重复行的 ID。

测试后你可以删除行

DELETE FROM table WHERE id IN ( <the previous query here> )

关于mysql - 如何查找/删除同一行中的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4773201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com