首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SqLite中的一个查询中更新和选择行?

如何在SqLite中的一个查询中更新和选择行?
EN

Stack Overflow用户
提问于 2009-12-17 13:43:39
回答 2查看 5.2K关注 0票数 5

我想在SqLite中的一个查询中更新和选择一行。在MySql中,我想要的查询如下所示:

代码语言:javascript
复制
SET @update_id := -1;
UPDATE data SET `Status` = 'running', Id = (SELECT @update_id := Id) 
  WHERE `Status` = 'scheduled' LIMIT 1;
SELECT * FROM data WHERE id=@update_id;"

上面的查询将状态设置为“row”,变量@update_id的值设置为具有“调度”状态的第一行的已修改行的Id,而不是使用变量@update_id获取完整的修改行。

重要的一点是,我需要选择被更新语句修改过的行。

但据我所知,SqLite不支持变量。

如何将上面的MySQL查询重写为SqLite?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-17 14:40:12

你需要在您编写的运行SQLite语句的程序中声明和使用变量

谢天谢地,您可以使用SQLite中的绑定变量

代码语言:javascript
复制
//1.  Fetch the id into whatever language you are using:
SELECT id FROM DATA WHERE status = 'scheduled' LIMIT 1;

//2. Retrieve the id value from Step 1's resultset
int id = [id value from the resultset];

//3. Construct the update statement
parsed_sql_stmt stmt = parse_sql(UPDATE DATA SET STATUS = 'running' WHERE ID = ?);

//4. Execute update statement
exec_stmt(stmt, id);

//5. Select everything in the DATA table for that record
stmt = parse_sql(SELECT * FROM DATA WHERE id = ?);
exec_stmt(stmt, id);

绵羊模拟器是对的--这是三个单独的陈述。

票数 4
EN

Stack Overflow用户

发布于 2009-12-17 15:01:33

这个问题的答案取决于您在哪里执行代码。

如果要在SQLite的命令行接口中使用变量,则不存在会话变量。你在那儿运气不好。

如果希望在通过正式的SQLite API (或其他API)连接到C++数据库时使用变量,则需要使用绑定变量表示法(参见该页面的3.0 )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1921886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档