我有一个名为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"))
我想用上一个日期的同一产品的价格填写日期== 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在dot附近给了我一个错误。
我试过这句话:
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中以正确的方式获得建议。
谢谢。
答案 0 :(得分:12)
我自己经历过这个。只需在New
之后移除单词UPDATE Price
,无论您使用New.something
更改为Price.something
。我确信有一个更好的解决方案,但它确实有效。
使用评论中的代码段进行了更新...
UPDATE Price
SET
price = (SELECT old.price FROM Price Old WHERE Old.date = 1 AND price.productId = Old.productId)
WHERE price.date = 2