【问题标题】:Limiting the Number of Rows Deletes in SQLITE DB限制 SQLITE DB 中删除的行数
【发布时间】:2014-01-03 18:25:09
【问题描述】:

有人知道在使用 sql DELETE 语句时限制删除的行数的方法吗?我只需要删除一次包含某个值的行,而不是删除该值的每个实例。据我了解,不能将 LIMIT 子句添加到 SQLITE 中的 DELETE 语句中。现在,我看不到仅使用 _id 来限制删除行数的方法,因为我不知道 _id 将提前删除哪一行;正在根据变量中保存的值删除行,它们可能位于数据库中的任何位置。我希望这是有道理的。这是删除语句:

String sql = "DELETE FROM strategyTotal WHERE strategy_prices = (?)" ;
db.execSQL(sql, new Double[] {subtractedStrategyPrice });

【问题讨论】:

  • 如何知道要删除哪些行满足条件?
  • 变量subtractedStrategyPrice 包含一个Double 值(即68.99)。无论该值出现在表中的何处,DELETE 语句以其当前形式将删除 strategy_prices 列中包含该值的行。问题是我只需要它删除一行,而目前,删除哪一行的值并不重要,只要它只是一个。
  • K - 我的回答应该能让你到达那里。

标签: android sql sqlite


【解决方案1】:

使用子查询:

String sql = "DELETE FROM strategyTotal WHERE _id IN (SELECT _id FROM strategyTotal WHERE strategy_prices = (?) LIMIT 1);" ;
db.execSQL(sql, new Double[] {subtractedStrategyPrice });

【讨论】:

  • 如果我使用 sae = (subquery) 而不是 in (subquery),我的感觉会更加温暖和模糊。毕竟,目标是删除一行。
  • @DanBracuk - 好的...不过您知道,这只会更新 1 条记录,因为子查询将其限制为 1 条。
  • @DanBracuk:是的,这就是目标。我在该表中保留了一个运行总计,并且我需要在更新项目时删除旧值的一个实例,以便可以添加新值,然后该列的总和将是准确的。
【解决方案2】:
    delete from tablename where rowid in (
    select rowid from tablename condition LIMIT 1)

尝试上述解决方法,否则您可能需要启用SQLITE ENABLE UPDATE DELETE LIMIT 我的查询只是一个例子。用您自己的查询替换它。

【讨论】:

  • 感谢您的意见,但我接受了之前的建议并且成功了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2015-04-11
  • 1970-01-01
相关资源
最近更新 更多