SQLite如何同时使用UPDATE和LIMIT?
SQLite how to use UPDATE and LIMIT at the same time?
我正在寻找的是只更新 table 中的 1 行,其中所有条目一开始都是零。
在网上冲浪一段时间后,我发现 LIMIT
应该可以很好地与 UPDATE
一起使用,但也不完全是。据我所见,我应该 "enabled" 一些 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
中使用了相同的列名?
我的table只有一列。
作为初学者:为了使您的问题完全有意义,您需要一个列来定义行的顺序,这样您就可以始终如一地判断应该更新哪条记录。这通常是 table 的主键。假设此列名为 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'
)
您可以获得满足您条件的行的最小(或最大)rowid
行,并使用它仅更新 1 行:
UPDATE Table_name
Set Column_name= new_value
WHERE rowid = (
SELECT MIN(rowid)
FROM Table_name
WHERE Column_name = initial_value
)
我正在寻找的是只更新 table 中的 1 行,其中所有条目一开始都是零。
在网上冲浪一段时间后,我发现 LIMIT
应该可以很好地与 UPDATE
一起使用,但也不完全是。据我所见,我应该 "enabled" 一些 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
中使用了相同的列名?
我的table只有一列。
作为初学者:为了使您的问题完全有意义,您需要一个列来定义行的顺序,这样您就可以始终如一地判断应该更新哪条记录。这通常是 table 的主键。假设此列名为 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'
)
您可以获得满足您条件的行的最小(或最大)rowid
行,并使用它仅更新 1 行:
UPDATE Table_name
Set Column_name= new_value
WHERE rowid = (
SELECT MIN(rowid)
FROM Table_name
WHERE Column_name = initial_value
)