MySQL删除重复记录,但保留多个记录(例5)
我有一个包含多个重复记录的表,我想根据特定的数字删除其中的一些记录,例如3或5 pr 10重复记录。我如何在MySQL中实现这一点 记录示例:MySQL删除重复记录,但保留多个记录(例5),mysql,Mysql,我有一个包含多个重复记录的表,我想根据特定的数字删除其中的一些记录,例如3或5 pr 10重复记录。我如何在MySQL中实现这一点 记录示例: ID TEXT 1000 HELLO JOHN 1001 HELLO JOHN 1002 HELLO JOHN 1003 HELLO JOHN 1004 HELLO JOHN 1005 HELLO JOHN 1006
ID TEXT
1000 HELLO JOHN
1001 HELLO JOHN
1002 HELLO JOHN
1003 HELLO JOHN
1004 HELLO JOHN
1005 HELLO JOHN
1006 HELLO JOHN
1007 HELLO JOHN
1008 HELLO JOHN
1009 HELLO JOHN
ETC...
如果以升序或降序模式删除,则For me不会导入。我只想以一种可控的方式删除记录,例如3条记录、5条记录、10条记录等等
例如,我希望在升序模式下有以下输出
ID TEXT
1000 HELLO JOHN
1001 HELLO JOHN
1002 HELLO JOHN
1003 HELLO JOHN
1004 HELLO JOHN
我猜你有多条短信,不仅仅是HELLO JOHN 所以您使用会话变量来模拟分区上的行数 请尝试此查询
DELETE t_n
FROM
table_name AS t_n
JOIN
( SELECT id
FROM table_name
WHERE text='HELLO JOHN'
ORDER BY id
LIMIT 5
) AS lim
ON t_n.id > lim.id;
我认为最简单的查询是
DELETE FROM Table1
WHERE ID NOT IN(
SELECT
a.ID
FROM (
SELECT
ID
FROM
Table1
ORDER BY
Table1.ID ASC
LIMIT 5
) AS a
)
看
因为你做不到
DELETE FROM Table1
WHERE ID NOT IN(
SELECT
ID
FROM
Table1
ORDER BY
Table1.ID ASC
LIMIT 5
)
因为它会出错
这个版本的MySQL还不支持LIMIT&IN/ALL/ANY/SOME
子查询'
请参见如何确定要保留哪些?是那些ID最低的3、5或10,还是通过其他方法?在您的示例中,是N=5,不是吗?请注意,保留哪些语句通常表示设计不佳,如“无关紧要”。这应该很重要!在这种情况下,创建一个临时表并使用INSERT INTO temp SELECT。。。从您的_表中,TEXT='TEXT'按ID排序,RAND LIMIT 5,截断_表并复制_表中的临时数据。或者更好的选项一个deliverd表/相关联的查询,比如在发布的一些答案中。@RaymondNijland好吧,公平地说,我说这可能表明设计不好,你似乎同意我的观点!我真正需要的是:检查我的编辑。我添加了一个选项,可以处理多个文本。
DELETE FROM Table1
WHERE ID NOT IN(
SELECT
ID
FROM
Table1
ORDER BY
Table1.ID ASC
LIMIT 5
)