【问题标题】:SQLite UPDATE ID deletes rowSQLite UPDATE ID 删除行
【发布时间】: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,谢谢!

标签: sql node.js sqlite


【解决方案1】:

上面发布的查询按预期工作;这是我的错误所在:我错过了此选择查询中的第一个 LEFT

SELECT 
Songs.Id as SongID, Songs.Title, Songs.CreationDate, Songs.LastModified, Files.Path, Files.PageOrder, Files.FileSize, Files.Type, Artists.Id as ArtistID, Artists.Name as ArtistName
FROM Songs 
JOIN Files ON Songs.Id = Files.SongId 
LEFT JOIN ArtistsSongs ON Songs.Id = ArtistsSongs.SongId 
LEFT JOIN Artists ON ArtistsSongs.ArtistId=Artists.Id

因为无法加入新歌而没有显示新歌的 ID - 这是固定版本:

SELECT 
Songs.Id as SongID, Songs.Title, Songs.CreationDate, Songs.LastModified, Files.Path, Files.PageOrder, Files.FileSize, Files.Type, Artists.Id as ArtistID, Artists.Name as ArtistName
FROM Songs 
LEFT JOIN Files ON Songs.Id = Files.SongId 
LEFT JOIN ArtistsSongs ON Songs.Id = ArtistsSongs.SongId 
LEFT JOIN Artists ON ArtistsSongs.ArtistId=Artists.Id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多