我想在 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;"
Run Code Online (Sandbox Code Playgroud)
上面的查询将状态设置为“正在运行”,变量@update_id的值设置为状态为“已调度”的第一行的修改行的ID,然后使用变量@update_id获取完整的修改排。
重要的一点是我需要选择我被UPDATE语句修改过的行
但据我所知 Sqlite 不支持变量。
如何为 Sqlite 重写上面的 MySQL 查询?
您需要在您编写的运行 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);
Run Code Online (Sandbox Code Playgroud)
Sheepsimulator 是对的 - 这是三个单独的陈述。
| 归档时间: |
|
| 查看次数: |
4806 次 |
| 最近记录: |