9

我有一个名为 Price 的 SQLite 表,如下所示:

date,     productId, price
----------------------
20120601, 10       , 10.1
20120601, 20       , 20.1
20120602, 10       , 0
20120602, 20       , 0
20120602, 30       , 0

该表是使用以下语句创建的:

CREATE TABLE "Price" ("date" INTEGER NOT NULL , "productId" INTEGER NOT NULL , "price" DOUBLE, PRIMARY KEY ("date", "productId"))

我想用上一个日期相同产品的价格填写date==20120602的价格。

即我希望表格变成这样:

date,     productId, price
----------------------
20120601, 10       , 10.1
20120601, 20       , 20.1
20120602, 10       , 10.1
20120602, 20       , 20.1
20120602, 30       , 0

所以我尝试了这个 SQL 语句:

UPDATE Price New SET New.price = 
    (SELECT old.price FROM Price Old WHERE New.date == 2 AND Old.date == 1 AND New.productId == Old.productId)

但是 SQLite 在点附近给了我一个错误。

比我试过这个说法:

UPDATE New Set New.Price = Old.Price
FROM Price New, Price Old
WHRER ......

SQLite 在 FROM 附近给了我一个错误。

我仔细检查了 SQLite 的 SQL 语法,但没有发现幸运。即使我从未尝试过,我认为这两个语句都可以在 MS SQL Server 中按预期工作。如果 New 和 Old 表太不同,第一个语句可能会起作用,但我需要它们在同一个表中。

我真的不想编写一个 for 循环来更新我的 C++ 代码中的一行,我需要有关在 SQLite 中实现此目的的正确方法的建议。

谢谢你。

4

1 回答 1

15

我自己也有过这种经历。只需在您使用change toNew之后和任何地方删除单词即可。我确信有一个更好的解决方案,但它有效。UPDATE PriceNew.somethingPrice.something

使用评论中的代码片段更新...

UPDATE Price 
SET
price = (SELECT old.price FROM Price Old WHERE Old.date = 1 AND price.productId = Old.productId) 
WHERE price.date = 2
于 2012-05-27T08:39:40.127 回答