当前位置: 首页 > 面试题库 >

计算另一个表中另一列的列值

丁雅懿
2023-03-14
问题内容

我有一个表,其中包含商店中每件商品的单价和其他详细信息。

CREATE TABLE Item (Item_id CHAR(4), Description CHAR(40), Sizes CHAR(40), Weight REAL, Unit_price REAL, PRIMARY KEY(Item_id));

另一个包含每个订单中包含的项目的详细信息。

CREATE TABLE Order_contains_items (Item_id CHAR(4), Order_no INT, Quantity_ordered INT, Ordered_price REAL, PRIMARY KEY(Item_id, Order_no), FOREIGN KEY(Order_no) REFERENCES Order(Order_no), FOREIGN KEY(Item_id) REFERENCES Item(Item_id));

现在我要计算

Order_contains_items.Ordered_price = Item.Unit_price * Order_contains_items.Quantity_ordered WHERE Order_contains_items.Item_id = Item.Item_id

请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下?

我尝试过根据另一列计算出的Column进行以下触发吗?:

CREATE TRIGGER Order_price BEFORE INSERT ON Order_contains_items
    FOR EACH ROW BEGIN
        SET NEW.Ordered_price = Item.Unit_price * NEW.Quantity_ordered
            WHERE NEW.Item_id = Item.Item_i
END;

但这似乎没有用


问题答案:

这是如何在MySQL中执行此操作(您的问题同时用mysql和标记sql-server

CREATE TRIGGER tg_bi_order_contains_items 
BEFORE INSERT ON Order_contains_items
FOR EACH ROW
  SET NEW.Ordered_price = 
  (
    SELECT Unit_price * NEW.Quantity_ordered
      FROM Item
     WHERE Item_id = NEW.Item_id
     LIMIT 1
  );

CREATE TRIGGER tg_bu_order_contains_items 
BEFORE UPDATE ON Order_contains_items
FOR EACH ROW
  SET NEW.Ordered_price = 
  (
    SELECT Unit_price * NEW.Quantity_ordered
      FROM Item
     WHERE Item_id = NEW.Item_id
     LIMIT 1
  );

这是 SQLFiddle 演示



 类似资料:
  • 问题内容: 我在Sqlite中有一个查询,其中涉及复杂的列计算,可以这样说: 我想将此计算选择为,但我还需要将其用作另一种计算的组成部分: 不幸的是,这会产生错误: 我知道我可以简单地重复计算: 但是,假设操作复杂且昂贵,是否有什么方法可以在以后重新引用它而不必重新计算呢? 问题答案: 您需要使用子查询。 结果

  • 问题内容: 这是否可能在另一个数据结构中包含一个数据结构?到目前为止,我只能在列表中插入字符串或数字。 所需的数据结构将是具有一个列表,其中每个组件也是一个列表。 问题答案: 简单答案:不,Redis列表成员只能是字符串。 复杂的答案:字符串可以做很多事情。您可以使用多种不同的格式(JSON,XML,CSV,特定于语言的序列化等)将列表序列化为字符串。Redis可以容纳很大的字符串值,因此您可以只

  • 问题内容: 我有看起来像的数据框: 为了进一步处理数据,我需要拆分该列,然后将其替换为如下所示的多列: 因此,这些列可以追加到初始数据帧。我不知道该怎么做,因为像 不能解决我的问题,因为我不仅需要基于列表中位置的列,还需要基于列表中每个唯一值的列。您知道我该如何处理吗? 问题答案: 您可以使用和: 如果需要计数值,则可以使用(我添加一个字符串进行测试):

  • 问题内容: 尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。 我有四个表: 回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。 我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC 没问题。一些简单的内部联接,我在路上。 困难在于在selec

  • 问题内容: 我有2个表,一个包含我需要的最终结果,另一个包含我需要根据设定级别选择的列列表。 例如 : 所以,如果我做以下 然后,基本上我需要使用此select语句中的列名来确定从另一条语句中选择了哪些列。 香港专业教育学院尝试过的方法,我当然知道这是错的,但可以让我对我试图做的事情有所了解。 我试图以一种动态方式构建一个sql查询,该查询可以通过我放在表中的任何列进行更改。 从理论上讲,这应与以

  • 我在数据库中有一个包含(id、日期、类别、行、持续时间)的表,我每天都有许多注册表,例如(1,12/12/2014,cat1,ligne1,12)(2,12/2014,cat2,ligne1,10)(3,12/12/2014,cat3,ligne2,23) (4,13/12/2014,cat1,LINGE1,10)(5,13/12/2014,cat2,LINGE1,20)(6,13/12/2014