【问题标题】:Workaround for DELETE ... LIMIT clause (SQL)DELETE ... LIMIT 子句 (SQL) 的解决方法
【发布时间】:2012-01-25 18:11:20
【问题描述】:

我正在开发一个支持 SQLite 的数据库查询抽象层。

不幸的是,SQLite 不支持 DELETE(和 UPDATE 等)查询中的 LIMIT 子句 - 除非在较新的版本中使用特殊标志编译。

那么有没有我可以实施的解决方法,以便仍然可以支持该查询类型?

【问题讨论】:

标签: sql sqlite


【解决方案1】:

虽然 LIMIT 在您的 SQLite 构建中没有天生支持,但您可以通过实现一种在子查询中使用 LIMIT 选择来识别将被更新或删除的行的方法来重现该行为。您应该知道,与使用启用了 LIMIT 的 SQLite 构建相比,这会导致性能下降,但如果您需要该功能,这似乎是一个可行的选择。

如果您正在处理大量数据,或者发现尝试这样做对性能的影响过于严重,那么另一个选择是使用 LIMIT 选择来填充临时表,然后作为您的一部分加入该表删除或更新。

【讨论】:

  • 我喜欢这个答案。 :) 不过还有一件事:根据我在查询对象中获得的数据,我无法知道主键列 - 有没有办法解决这个问题?
  • @Franz - 这是一种独特的情况。如果您收到这样的通用数据,以至于您无法判断您所针对的架构的 PK 是什么,那么您可能会被卡住。我唯一能想到的是,如果给你一个元组属性的完整列表,你可以尝试一个 WHERE 并指定你拥有的每个属性。当然,这只有在保证表具有唯一元组的情况下才有效。
  • 我想我会选择不支持 DELETE ... LIMIT 子句。啊,SQLite 惹恼了我!
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2014-10-13
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多