我可以在SQLite中创建计算列吗?

时间:2009-07-14 11:02:09

标签: sqlite

语法是什么(如果可能的话),例如,创建一个名为Car_Model的表,该表具有表Car_Make的外键,并为Car_Make提供一列这是Car_Models

中存在的Car_Make的数量

(如果这看似微不足道或像家庭作业一样,因为我只是在家里玩一些python试图重现我在工作中遇到的问题。我们在工作中使用MS-SQL。)

3 个答案:

答案 0 :(得分:27)

SQLite不支持计算列。

但是,使用相对简单的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

答案 1 :(得分:3)

我可以在SQLite中创建计算列吗?

是的,有可能。此功能添加于2020-01-22- SQLite 3.31.0

Generated Columns

生成的列(有时也称为“计算列”)是表的列,其值是同一行中其他列的函数。可以读取生成的列,但不能直接写入其值。更改生成的列的值的唯一方法是修改用于计算生成的列的其他列的值。

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
);

重要提示:

生成的列的表达式只能引用常量 同一行中的文字和列,并且只能使用标量 确定性功能。 表达式可能不使用子查询, 集合函数,窗口函数或表值函数。

生成的列的表达式可能引用其他生成的列 同一列中的列,但没有生成的列可以依赖 本身,无论是直接还是间接。

这意味着您不能以原始问题中所述的方式依赖其他表来创建计算列。因此,可行的解决方案是已经提出的视图或触发器。

答案 2 :(得分:0)

您可以应用触发器来执行此操作。在这种情况下,我在两个字段之间进行了划分。

CREATE TRIGGER [tUnitPrice] AFTER UPDATE OF [Price], [Qty] ON [tArticles] BEGIN
    UPDATE [tArticles]
    SET    [UnitPrice] = [tArticles].[Price] / [tArticles].[Qty]
    WHERE [rowId] = [NEW].[RowId]; END;