我可以在SQLite中创建计算列吗?
语法是什么(如果可能的话),例如,创建一个名为我可以在SQLite中创建计算列吗?,sqlite,calculated-columns,Sqlite,Calculated Columns,语法是什么(如果可能的话),例如,创建一个名为Car\u Model的表,它有一个表Car\u Make的外键,并给Car\u Make一列,该列是该Car\u Make存在的Car\u Models (如果这看起来很琐碎,或者是因为我只是在家里玩一些python,试图重现我在工作中遇到的问题。我们在工作中使用MS-SQL。)更新:从版本3.31.0(于2020-01-22发布)开始,下面的答案适用于3.31.0之前的版本 SQLite不支持计算列 SELECT Car_Make.Name, C
Car\u Model
的表,它有一个表Car\u Make
的外键,并给Car\u Make
一列,该列是该Car\u Make
存在的Car\u Models
(如果这看起来很琐碎,或者是因为我只是在家里玩一些python,试图重现我在工作中遇到的问题。我们在工作中使用MS-SQL。)更新:从版本3.31.0(于2020-01-22发布)开始,下面的答案适用于3.31.0之前的版本 SQLite不支持计算列
SELECT Car_Make.Name, Count(*) AS Count
FROM Car_Make, Car_Model
WHERE Car_Make.Id = Car_Model.Make
GROUP BY Car_Make.Name
然而,您的问题可以通过一个相对简单的SQL查询来解决,然后您可以创建一个视图,使其看起来像一个带有额外计算列的表
SELECT Car_Make.Name, Count(*) AS Count
FROM Car_Make, Car_Model
WHERE Car_Make.Id = Car_Model.Make
GROUP BY Car_Make.Name
这将返回一个类似于以下内容的表
Name Count
---- -----
Nissan 5
Toyota 20
Ford 10
您可以应用触发器来执行此操作。在这种情况下,我在两个字段之间应用除法
CREATE TRIGGER [tUnitPrice] AFTER UPDATE OF [Price], [Qty] ON [tArticles] BEGIN
UPDATE [tArticles]
SET [UnitPrice] = [tArticles].[Price] / [tArticles].[Qty]
WHERE [rowId] = [NEW].[RowId]; END;
我可以在SQLite中创建计算列吗
是的,这是可能的。此功能是在2020-01-22-SQLite 3.31.0上添加的
生成的列(有时也称为“计算列”)是表中的列,其值是同一行中其他列的函数。可以读取生成的列,但不能直接写入它们的值。更改生成列的值的唯一方法是修改用于计算生成列的其他列的值
CREATE TABLE t1(
a INTEGER PRIMARY KEY,
b INT,
c TEXT,
d INT GENERATED ALWAYS AS (a*abs(b)) VIRTUAL,
e TEXT GENERATED ALWAYS AS (substr(c,b,b+1)) STORED
);
重要提示:
生成列的表达式只能引用常量
同一行中的文字和列,并且只能使用标量
确定性函数表达式不能使用子查询,
聚合函数、窗口函数或表值函数。
生成列的表达式可以引用其他生成列
同一行中的列,但生成的列不能依赖于
它本身,直接或间接地
这意味着您不能创建一个计算列,因为它将依赖于原始问题中所述的其他表。因此,可行的解决方案是已经提出的观点或触发点