首页 > 解决方案 > SQLite 如何同时使用 UPDATE 和 LIMIT?

问题描述

我正在寻找的是只更新表中的 1 行,其中所有条目一开始都是零。
在网上冲浪一段时间后,我发现LIMIT应该可以正常工作UPDATE,但也不完全。从我所见,我应该用 '启用' 一些东西SQLITE_ENABLE_UPDATE_DELETE_LIMIT,但我不知道那是什么,也不知道我应该在何时何地完成它。
对于我的情况,我还看到了不同的解决方案,例如:

UPDATE Table_name
Set Column_name= new_value
WHERE Column_name IN 
(   SELECT Column_name
    FROM Table_name
    WHERE Column_name = initial_value
    LIMIT 1
)

但是,出于某种原因,这对我不起作用。LIMIT 1绝对没有效果,因为整个列都被修改了。

是因为我在SET/SELECT和 中使用了相同的列名WHERE吗?

我的表只包含一列。

标签: sqlsqlitesql-order-bysql-deletesql-limit

解决方案


作为初学者:为了让您的问题完全有意义,您需要一个定义行顺序的列,这样您就可以始终如一地判断应该更新哪个记录。这通常是表的主键。让我假设此列称为id.

然后,您可以将查询编写为:

update table_name
set column_name = 'new value'
where column_name = 'initial value'
order by id
limit 1

如果您没有主键列,则在技术上可以删除该order by子句。将更新任意一行。

update table_name
set column_name = 'new value'
where column_name = 'initial value'
limit 1

请注意,要使其正常工作,您需要在SQLITE_ENABLE_UPDATE_DELETE_LIMIT启用选项的情况下编译 SQLite(这并不容易,正如 Shawn 和 forpas 所评论的那样)。

如果您没有该选项但您有一个主键列,那么您可以使用子查询进行过滤:

update table_name
set column_name = 'new value'
where id = (
    select min(t1.id) 
    from table_name t1 
    where t1.column_name = 'initial value'
)

推荐阅读