【发布时间】:2017-06-27 05:45:46
【问题描述】:
我想从文件夹中的数据库文件中删除一堆行。连接并计算 db 文件中的行数是可行的,但是当我尝试删除特定数量的行时,我会卡住。
输入:
sql = "SELECT COUNT(*) AS id FROM wifi_probe_requests";
...
sql = "DELETE FROM wifi_probe_requests LIMIT " + rowcount/2;
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
输出:
54943
[SQLITE_ERROR] SQL error or missing database (near "LIMIT": syntax error)
不使用限制可以正常工作,我可以删除整个 db 表,但我想要删除一半的 db 行,如我所做的 rowcount/2 所示。
更新:
到目前为止,我已经通过找到位于 n-rows/2 的 id 然后获取它的值(例如 264352)解决了这个问题。然后使用该数字指示将要删除哪些 id 行(例如 id.value
sql = "SELECT COUNT(*) AS id FROM wifi_probe_requests";
int rowcount = COUNT(*);
sql = "DELETE FROM wifi_probe_requests WHERE id < (SELECT id FROM wifi_probe_requests ORDER BY id ASC LIMIT "+ rowcount/2 + ",1)";
rowcount = 50000
Delete valueof.id < valueof.id.50000/2
因此,所有低于位置 25000 的 id 值的 id 值都将被删除。
【问题讨论】:
-
怎么样:
delete from wifi_probe_requests where primary_key_column in (select primary_key_column from wifi_probe_requests limit ...)? -
是的,我尝试了类似于建议的方法,它似乎工作得很好。有点奇怪,您需要额外的步骤,但至少它有效。