我想在SqLite中的一个查询中更新和选择一行。在MySql中,我想要的查询如下所示:
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?
发布于 2009-12-17 14:40:12
你需要在您编写的运行SQLite语句的程序中声明和使用变量。
谢天谢地,您可以使用SQLite中的绑定变量
//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);绵羊模拟器是对的--这是三个单独的陈述。
发布于 2009-12-17 15:01:33
这个问题的答案取决于您在哪里执行代码。
如果要在SQLite的命令行接口中使用变量,则不存在会话变量。你在那儿运气不好。
如果希望在通过正式的SQLite API (或其他API)连接到C++数据库时使用变量,则需要使用绑定变量表示法(参见该页面的3.0 )。
https://stackoverflow.com/questions/1921886
复制相似问题