【问题标题】:How to delete first few records from a table using SQLite query?如何使用 SQLite 查询从表中删除前几条记录?
【发布时间】:2012-04-30 02:24:48
【问题描述】:

如果记录数为 110,我想从我的 SQLite 表中删除前 10 条记录(即记录 1 到 10)。我的表中只需要 100 条记录。如果记录数超过 100,则应删除这些记录,因此,如果我添加新记录,则也应仅存在 100 条记录。怎么可能使用 SQLite 查询,请提供您的建议。谢谢。

【问题讨论】:

标签: sqlite


【解决方案1】:

我推测您希望通过在每次表超过 100 行时删除前“X”行来保持表中的 100 行。以下是您可以执行的操作:

Delete from table_name where rowid IN (Select rowid from table_name limit X);

随着 SQLite 表的增长,这将继续删除前“X”行。

【讨论】:

  • 没关系。但我想保持从 1 到 100 的编号。不是 11 t0 110!我希望你明白我的意思。
  • @user435062:通常您不会更改主键来维护行 ID,因为它们唯一地标识每一行。为什么不尝试在表格中添加另一列来保持 1 到 100 的编号?
  • 在我的表中,我没有将 RecordID 作为主键。
  • 这将删除选择中的项目,您应该否定 IN "NOT IN" 并使用 order by 以确保您获得最后 100 条记录,类似于 DELETE FROM table_name WHERE rowid NOT IN (SELECT rowid FROM table_name ORDER BY rowid LIMIT X);
【解决方案2】:

首先,您必须执行一个返回表中最后 100 条记录的选择,然后使用 delete 命令删除所有不在结果中的 id,如下所示:

DELETE FROM tbl_name WHERE NOT EXISTS in (SELECT id FROM tbl_name ORDER BY id LIMIT 100 );

希望这会有所帮助!

【讨论】:

  • 您好,我尝试了查询,但它不起作用。我通过唱“SQLite 数据库浏览器”来尝试查询。当我执行查询时它挂起。
  • DELETE FROM Data_Table WHERE RecordID in (select RecordID from Data_Table limit 10) 此查询工作正常。它成功删除了前 10 条记录。现在删除后我想更新列表,即从 1 到 110 的 110 条记录中,如果我删除前 10 条记录,则该表包含从 11 到 110 的 ID。但我想再次将其设为 1 到 100。我该如何执行此操作。
  • 你真的不想这样做,相信我。如果你想要一个自动增量值,我建议你在运行时在选择中创建它。保持 id 不变,否则您可能会在应用程序中尝试奇怪的行为。
  • 我对 sqllite 不是很有经验,但在 mysql 中会像 SELECT @m:=0;SELECT @m:=@m+1 AS counter, * FROM tbl_name... 等。
【解决方案3】:

DELETE FROM {{ table }} LIMIT 0, 10

我不完全确定这是否正确,我目前无法检查。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 2012-02-09
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多