我想从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)
任何解决方案?
答案 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,这有点糟糕的设计。