25

语法是什么(如果可能的话),例如,创建一个名为 table 的 table Car_Model,它有一个 table 的外键Car_Make,并给出Car_Make一个 column,它是Car_Modelsthat 的存在数Car_Make

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

4

3 回答 3

35

更新:从 3.31.0 版(2020-01-22发布)开始,SQLite 支持计算列,因此以下答案适用于 3.31.0 之前的版本

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
于 2009-07-14T12:53:07.630 回答
12

我可以在 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
);

重要的:

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

生成列的表达式可以引用同一行中的其他生成列,但没有生成列可以直接或间接依赖于自身。

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

于 2020-01-26T06:52:46.837 回答
4

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

CREATE TRIGGER [tUnitPrice] AFTER UPDATE OF [Price], [Qty] ON [tArticles] BEGIN
    UPDATE [tArticles]
    SET    [UnitPrice] = [tArticles].[Price] / [tArticles].[Qty]
    WHERE [rowId] = [NEW].[RowId]; END;
于 2018-11-19T11:24:25.270 回答