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

Mar*_*tin 5 mysql sql sqlite

我想在 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 查询?

OMG*_*ies 4

您需要在您编写的运行 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 是对的 - 这是三个单独的陈述。