UPDATE语句中表名的SQLite别名

UPDATE语句中表名的SQLite别名,sqlite,alias,Sqlite,Alias,我有一个名为Price的SQLite表,如下所示: date, productId, price ---------------------- 20120601, 10 , 10.1 20120601, 20 , 20.1 20120602, 10 , 0 20120602, 20 , 0 20120602, 30 , 0 date, productId, price ---------------------- 20

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

date,     productId, price
----------------------
20120601, 10       , 10.1
20120601, 20       , 20.1
20120602, 10       , 0
20120602, 20       , 0
20120602, 30       , 0
date,     productId, price
----------------------
20120601, 10       , 10.1
20120601, 20       , 20.1
20120602, 10       , 10.1
20120602, 20       , 20.1
20120602, 30       , 0
该表是使用以下语句创建的:

CREATE TABLE "Price" ("date" INTEGER NOT NULL , "productId" INTEGER NOT NULL , "price" DOUBLE, PRIMARY KEY ("date", "productId"))
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)
UPDATE New Set New.Price = Old.Price
FROM Price New, Price Old
WHRER ......
我想将日期==20120602的价格填入上一日期相同产品的价格

i、 我想把桌子变成这样:

date,     productId, price
----------------------
20120601, 10       , 10.1
20120601, 20       , 20.1
20120602, 10       , 0
20120602, 20       , 0
20120602, 30       , 0
date,     productId, price
----------------------
20120601, 10       , 10.1
20120601, 20       , 20.1
20120602, 10       , 10.1
20120602, 20       , 20.1
20120602, 30       , 0
所以我尝试了以下SQL语句:

CREATE TABLE "Price" ("date" INTEGER NOT NULL , "productId" INTEGER NOT NULL , "price" DOUBLE, PRIMARY KEY ("date", "productId"))
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)
UPDATE New Set New.Price = Old.Price
FROM Price New, Price Old
WHRER ......
但SQLite在圆点附近给了我一个错误

然后我试着说:

CREATE TABLE "Price" ("date" INTEGER NOT NULL , "productId" INTEGER NOT NULL , "price" DOUBLE, PRIMARY KEY ("date", "productId"))
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)
UPDATE New Set New.Price = Old.Price
FROM Price New, Price Old
WHRER ......
SQLite在附近给了我一个错误

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

我真的不想为我的C++代码中的一行写一个for for循环的更新,我需要正确的方法来实现SQLite中的这个。< /P>
谢谢。

我自己也经历过。只需在更新价格后删除单词New,无论您在何处使用New.something,即可更改为Price.something。我相信有一个更好的解决方案,但它是有效的

已使用注释中的代码段更新


我尝试了您的解决方案,不再有语法错误,但值没有更改。请您更准确地说明我应该使用的sql语句好吗?谢谢。如果我将价格列更改为允许NULL,则在运行UPDATE Price set Price=SELECT old.Price FROM Price old之后,每个价格都将设置为NULL,其中Price.date==2,old.date==1,Price.productId==old.productId,所有数据都丢失了……既然price.date==2与旧表完全无关,那么将其放入子查询又有什么意义呢?将其移到子查询之外。应为:更新价格集价格=从旧价格中选择旧价格,其中旧价格为Old.date=1,从旧价格中选择旧价格,并从旧价格中选择Price.productId=Old.productId,其中日期为2。顺便问一下,我刚才注意到,你为什么要用double='s?我把问题和答案读了一、二、三遍。这只是没有发生。我看不出有什么变化,答案与问题相符。如果你想要的不是这个问题,试着提出另一个问题。也给我一个链接:对不起,我只是不明白你想要什么: