Transaction
表:
ID|名称|价格|支付金额
-|-|
1|布鲁斯·韦恩|10.0|5.0
2|Lois Lane|33.33|22.22
3|克拉克·肯特|44.4|44.4
4|布鲁斯·韦恩|15.0|20.0Person
表:
ID|名称|总价|已支付总价|到期付款
-|
1|布鲁斯·韦恩|25.0|25.0|0.00
2|Lois Lane|33.33|22.22|11.11
3|克拉克·肯特|44.4|44.4|0.00Transaction
表连接到应用程序,Person
表有ID
和Name
。PaymentDue
列计算TotalPrice - TotalPaid
。TotalPrice
和TotalPaid
列都为空,其缺省值为0.00
。
我想从Transaction
表的Price
和Amount Paid
列生成/更新TotalPrice
和TotalPaid
,其中Transaction.Name = Person.Name
。
我正在尝试使用以下命令创建表格:
CREATE TABLE "Person" (
"ID" INTEGER NOT NULL UNIQUE,
"Name" TEXT,
"TotalPrice" REAL AS (SUM("main.Transaction.Price") WHERE "main.Transaction.Name" = "Name"),
"TotalPaid" REAL DEFAULT 0.00,
"PaymentDue" REAL NOT NULL AS ("TotalPrice" - "TotalPaid"),
PRIMARY KEY("ID" AUTOINCREMENT)
);
它给出了一个错误:
执行已完成,但出现错误。RESULT:NEAR“WHERE”:第1行出现语法错误:CREATE TABLE“Person”(“ID”INTEGER NOT NULL UNIQUE,“NAME”Text,“TotalPrice”REAL AS(sum(“main.Transaction.Price”)where
我还试过:
"TotalPrice" REAL AS (SELECT SUM("main.Transaction.Price") WHERE "main.Transaction.Name" = "Name"),
错误:
执行已完成,但出现错误。结果:接近“SELECT”:第1行出现语法错误:CREATE TABLE“Person”(“ID”INTEGER NOT NULL UNIQUE,“NAME”Text,“TotalPrice”REAL AS(SELECT
另请注意:
"TotalPrice" REAL AS (SUM(t.Price) FROM Transaction t WHERE "main.Transaction.Name" = "Name"),
错误:
接近“from”语法错误
这个应用程序是检查客户/供应商付款和库存管理。我使用以下命令创建了Person
表:
CREATE TABLE "Person" (
"ID" INTEGER NOT NULL UNIQUE,
"Name" TEXT,
"TotalPrice" REAL DEFAULT 0.00,
"TotalPaid" REAL DEFAULT 0.00,
"PaymentDue" REAL NOT NULL AS ("TotalPrice" - "TotalPaid"),
PRIMARY KEY("ID" AUTOINCREMENT)
);
和Transaction
表:
CREATE TABLE "Transaction" (
"ID" INTEGER NOT NULL UNIQUE,
"Name" TEXT,
"Price" REAL NOT NULL DEFAULT 0.00,
"AmountPaid" REAL NOT NULL DEFAULT 0.00,
PRIMARY KEY("ID" AUTOINCREMENT)
);
我可以执行更新查询,但不知道如何使用SUM()
。
2条答案
按热度按时间2fjabf4q1#
您正在尝试创建一个生成的列,但这是不可能的,因为该表达式引用了另一个表的列(更不用说它对该列进行了聚合)。
此约束记录在生成的列/功能中:
生成的列的表达式可以引用表中的任何其他声明列,包括其他生成的列,只要该表达式不直接或间接引用其自身。
所以,这些表达方式:
和
是不允许的。
您应该做的是创建一个View而不是一个表:
并通过从视图中进行选择来获得所需的结果集:
请参阅demo。
wwwo4jvm2#
生成的列的表达式只能引用同一行中的常量文字和列,并且只能使用标量确定性函数。该表达式不能使用子查询、聚合函数、窗口函数或表值函数。
阅读文档https://sqlite.org/gencol.html