次のような 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 があまりにも異なるテーブルの場合、最初のステートメントは機能する可能性がありますが、同じテーブルにそれらが必要です。
C++ コードで 1 行を 1 回更新する for ループを書きたくないので、SQLite でこれを実現する正しい方法についてアドバイスが必要です。
ありがとうございました。