声明一个表有一个列是两个列的乘积

5

产品表

id  name   price   quantity   total

1     food    50      1         50
2     drink   20      2         40
3     dress   100     3         300

如何声明一个包含两个列的乘积的表格?

我有以下代码:

CREATE TABLE [dbo].[Orders] (
    [Id]          INT        IDENTITY (1, 1) NOT NULL,
    [ProductName] NCHAR (70) NULL,
    [Price]       INT        NULL,
    [Quantity]    INT        NULL,
    [Total] INT NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

你真的想要一个字段来存储 total 吗?或许在你的 SQL 查询或者视图中计算更合适。如果你确实需要一个“计算列”,可以这样声明:[Total] INT AS (Price * Quantity) - sgeddes
在C#中,T-SQL中使用AS时,[Total] INT AS (Price * Quantity)会出现错误。 - nAPL
看起来不支持:https://dev59.com/bVXTa4cB1Zd3GeqP2ox_ - JohnLBevan
也许您想要一个单独的表来存储乘法表? - wildplasser
不,我在这个表里没有。而且这段代码不起作用 ALTER TABLE [Orders] ADD TOT INT AS Price * Quantity; :( - nAPL
为什么要这样做?直接将其构建到您的查询/应用程序中即可。 - Steve Robbins
2个回答

2
听起来你想要一个查看
他们的例子恰好符合你所描述的。
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
+------+-------+-------+

1
你可以试试这个伙计:

DROP TRIGGER IF EXISTS trg_product_total;
DELIMITER //
CREATE TRIGGER trg_product_total AFTER INSERT ON product
FOR EACH ROW BEGIN
  SET @price = NULL, @quantity = NULL;  

  SELECT price INTO @price FROM product
  WHERE id = NEW.id;  

  SELECT quantity INTO @quantity
  WHERE id = NEW.id;  

  UPDATE product SET total = @price * @quantity
  WHERE id = NEW.id;
END;

如果您不想在将产品总价插入数据库之前进行处理,可以使用这种方法。

触发器将在每次向表中添加新记录时执行,在其中total列的预期插入值为“NULL”或“0”,具体取决于您的默认值。

但是我认为在插入之前计算会更好。

流程如下:

Application side
1. get price and quantity for the product
2. calculate for the total
3. insert values into the query
4. execute query

如果您想了解更多关于MySQL触发器的内容:链接
此外,PHP事务处理:链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接