如何根据行数删除数据库表行

时间:2012-03-19 12:27:05

标签: java mysql database

我想从xyz表中删除表行,其中行数应该大于10,但我没有任何保存行位置的列。我不想添加其他列,例如Id。这是我的表结构:

name(as text)  subject(as text)  filename(as text)

这是我的查询删除整个表

delete from questions where (select Count(*) from questions)  between  10 and 20

我没有得到写的东西而不是(select Count(*) from questions)

任何解决方案?

6 个答案:

答案 0 :(得分:1)

另一种解决方案可能是在每条记录上保留一个时间戳,并在新记录进入时丢弃最旧的记录。看起来奇怪的是,你对持久存储的数据的需求很少。我想知道你的要求和你的设计。

答案 1 :(得分:1)

我认为这样可行:

DELETE FROM table WHERE name NOT IN (SELECT TOP 10 name FROM table)

这假设名称是唯一的。

答案 2 :(得分:0)

使用相同的方案创建一个副本表,例如test2

insert into test2 select * from test limit 10

delete from test;

insert into test select * from test2;

答案 3 :(得分:0)

MySQL不提供行ID,但似乎有一个使用会话变量的解决方法,如此线程的答案中所述:Equivalent of Oracle’s RowID in MySQL

答案 4 :(得分:0)

做出两个假设:name是你的id列,你想按名称排序。

一种方法是:

DELETE FROM Xyz WHERE name NOT IN (SELECT name FROM Xyz ORDER BY name LIMIT 10);

但这可能只会给你:

ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

作为解决方法,您可以使用临时表:

CREATE TEMPORARY TABLE temp SELECT * FROM Xyz ORDER BY name LIMIT 10;
DELETE FROM Xyz WHERE name NOT IN (SELECT name FROM temp);
DROP TABLE temp;

答案 5 :(得分:0)

这很奇怪。

1)为什么不想要额外的列? 2)您要删除哪些行?除非选择名称,主题或文件名,否则需要一个额外的列 2a)如果删除哪些行无关紧要,您可以简单地在10行后停止插入。您也可以使用CHECK约束来强制执行此操作,但我不确定MySQL是否支持这样的高级构造。
3)这个数字真的是10吗?如果是这样,您确定数据库是您需要的存储吗?我必须在这里找@duffymo,这有点糟糕的设计。