【发布时间】:2020-03-04 14:57:43
【问题描述】:
我正在尝试更新表格行中的值并为该行提供下一个连续 ID(我不是决定这一点的人,但事实是:当我更改标题时,我需要一个新 ID)。
例如:
Id | Title
------------
2 | Wonderwall
3 | Lonely Doy
4 | All That She Wants
应该变成
Id | Title
------------
2 | Wonderwall
4 | All That She Wants
5 | Lonely Day
我尝试在保持 ID 不变的情况下更新标题。此查询完美无缺:
result = await database_helper.dbRunQuery(`
UPDATE Songs
SET Title=?,
LastModified=?
WHERE Id=?`, [
newValue,
new Date(),
id
]);
但是,当我尝试同时设置 ID 时,该行会被删除而没有任何错误消息(显然 SQLite 不会在 UPDATE 语句中抛出这些错误消息)。这是不起作用的代码:
result = await database_helper.dbRunQuery(`
UPDATE Songs
SET Title=?,
LastModified=?,
Id=?
WHERE Id=?`, [
newValue,
new Date(),
database_helper.getNextSongID(),
id
]);
这样做有什么原因吗?而且,因为我需要更新更多这样的表:有没有更简单的方法来自动增加 Id 列(不,没有为这个表定义自动增加,我不能改变它)?我已经有查询了
SELECT Id
FROM Songs
ORDER BY Id DESC
LIMIT 1
为了选择表中的最高 ID,我应该可以将它放在像 Update Songs Set ..., Id=(SELECT Id ... LIMIT 1) WHERE ... 这样的子查询中,对吧?
我不得不承认,我的 SQL 已经生锈了……
【问题讨论】:
-
update不应删除行。你怎么知道该行被删除了? -
事后我正在选择,我想修改的行不见了
-
等等等等。 SELECT 包括与其他表的 JOIN。虽然这些都应该是左连接,但这可能仍然是问题所在。让我检查一下。
-
我在 SELECT 查询中错过了
JOIN之前的一个LEFT,谢谢!