sql - 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
吗?
我的表只包含一列。
解决方案
作为初学者:为了让您的问题完全有意义,您需要一个定义行顺序的列,这样您就可以始终如一地判断应该更新哪个记录。这通常是表的主键。让我假设此列称为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'
)
推荐阅读
- python - 如何将特定位置的行插入Python中的数据框?
- ruby - 对破折号小部件进行故障排除
- r - 有没有办法创建一个没有聚合值的子集数据透视表?
- mysql - 需要从 MySQL 中获取行
- javascript - PhpStorm 无法识别 webpack 别名
- node.js - 控制器中的快速路由未解决
- intel - 英特尔 VT-x:如何将 NMI 交付给客户操作系统
- python - 尝试在 AWS Lambda 中使用 Pillow 时无法导入名称“_imaging”
- linux - Linux 中的 Spring Data GemFire 服务器 java.net.BindException
- javascript - 动态更新父状态