将 SQL Server 中的 UPDATE FROM 转换为 SQLite



我有一个具有以下架构的表;

CREATE TABLE [dbo].[MatrixElements] (
    [Id]        INT        IDENTITY (1, 1) NOT NULL,
    [OdPairKey] INT        NOT NULL,
    [Value]     FLOAT (53) NOT NULL,
    [Matrix_Id] INT        NULL
);

Matrix_Id是另一个表的外键。我想做的是用原始值和与相同OdPairKey匹配但Matrix_Id不同的其他值的总和覆盖表中的值。以下查询适用于 SQL Server;

UPDATE dbo.MatrixElements
SET [Value] = O.[Value] + I.[Value]
FROM dbo.MatrixElements O
INNER JOIN (SELECT * FROM dbo.MatrixElements WHERE Matrix_Id = 2) I
ON O.OdPairKey = I.OdPairKey
WHERE O.Matrix_Id = 1

但事实证明,SQLite不支持UPDATE上的FROM子句。我一生都无法弄清楚如何将其转换为兼容的SQLite查询。有什么想法吗?

您可以将查询转换为使用相关的子查询,如下所示:

UPDATE MatrixElements
SET Value = Value + (SELECT Value FROM MatrixElements a 
        WHERE a.Matrix_Id = 2 And a.OdPairKey = MatrixElements.OdPairKey LIMIT 1)
WHERE Matrix_Id = 1

最新更新