我想要的是只更新表中的一行,其中所有条目在开始时都是零。
在网上找了一会儿答案后,我发现 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
?
我的表只有一列。
2条答案
按热度按时间mbskvtky1#
你可以得到最小值(或最大值)
rowid
满足条件并使用它仅更新一行的行数:mkh04yzy2#
作为一个初学者:为了让你的问题变得有意义,你需要一个列来定义行的顺序,这样你就可以一致地判断应该更新哪个记录。这通常是表的主键。假设这个列被称为
id
.然后,您可以将查询编写为:
如果没有主键列,技术上可以删除
order by
条款。将更新任意一行。请注意,要使其工作,您需要使用选项编译sqlite
SQLITE_ENABLE_UPDATE_DELETE_LIMIT
启用(正如shawn和forpas评论的那样,这不是那么容易做到)。如果没有该选项但有主键列,则可以使用子查询进行筛选: