gpt4 book ai didi

mysql - 删除特定的重复行并保留一个

转载 作者:行者123 更新时间:2023-11-29 12:19:21 26 4
gpt4 key购买 nike

首先,我已经研究了这个问题 2 个小时,并且在将其发布到此处之前进行了全面的研究。这里也有类似的问题,但没有一个与我的问题相符(所以请不要将其标记为重复)。

我有一个巨大的表,其中包含超过 100000 条记录,我想要做的是删除某些重复的行。

示例我有以下行:

ID   NAME   NUMBER
1 'NIL' 1234
2 'NIL' 1234
3 'NIL' 1234
4 'MES' 5989
5 'NL' 1235
6 'NL' 12385
7 'NL' 1235
8 'MES' 5989

预期输出(保留哪个 ID 或删除哪个 ID 并不重要):

ID   NAME   NUMBER
1 'NIL' 1234
2 'NIL' 1234
3 'NIL' 1234
4 'MES' 5989
5 'NL' 1235
6 'NL' 12385

我已经尝试过这个:

DELETE FROM tableA
WHERE ID NOT IN
(
SELECT ID From (SELECT * FROM tableA) AS t1
WHERE PHONE NOT IN (1235,5989)
GROUP BY NAME, NUMBER
UNION
SELECT MIN(ID) From (SELECT * FROM tableA) AS t2
WHERE PHONE IN (1235,5989)
GROUP BY NAME, NUMBER
)

上面的查询在 10 或 20 行的测试数据上工作得很好,但是当通过实时数据库应用时,它需要很长时间并且不断地获取行(查询已经运行了 40 多分钟)我不知道我做错了什么。任何帮助将不胜感激。

最佳答案

CREATE TABLE tableB like tableA;
INSERT INTO tableB (SELECT * FROM tableA GROUP BY name,number);
RENAME TABLE tableA to tableA_with_dups, tableB to tableA;

*请注意,这不一定是最佳解决方案,具体取决于这是否是正在运行的系统、表索引等。如果您有更多要求,请添加到评论中,我将添加更合适的答案。

*另外,您能为我们运行一下吗:SHOW CREATE TABLE tableA;那么我们就可以正确利用索引。

关于mysql - 删除特定的重复行并保留一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29269302/

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