Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 触发where子句依赖于3个表?_Mysql_Sql_Triggers_Nested - Fatal编程技术网

Mysql 触发where子句依赖于3个表?

Mysql 触发where子句依赖于3个表?,mysql,sql,triggers,nested,Mysql,Sql,Triggers,Nested,我想扣的扳机有问题。这是一个大学项目,所以它需要一个触发器完成 我有3张涉及触发器的表格。客户订单、产品客户订单和产品分公司库存(其内容和用途如下所示)。我还包括了我正在使用的代码,虽然我尝试了很多不同的版本,但都没有成功,这是最新的一个 我可以让触发器根据customer\u order insert上的branch\u id来减少product\u branch\u stock表上的库存,但它不能说明product\u id在另一个表上。所以,我也很想知道我怎么能把另一张桌子放到触发器里 这

我想扣的扳机有问题。这是一个大学项目,所以它需要一个触发器完成

我有3张涉及触发器的表格。客户订单、产品客户订单和产品分公司库存(其内容和用途如下所示)。我还包括了我正在使用的代码,虽然我尝试了很多不同的版本,但都没有成功,这是最新的一个

我可以让触发器根据customer\u order insert上的branch\u id来减少product\u branch\u stock表上的库存,但它不能说明product\u id在另一个表上。所以,我也很想知道我怎么能把另一张桌子放到触发器里

这个设计可能不是最好的,但请记住,我现在才开始使用sql大约6周,我还有很多东西要学!所以,您能给予的任何帮助都将不胜感激!我的项目周五到期

编辑:我在下面添加了带有相关列和示例行的表

我正在尝试创建的此触发器(可能是嵌套触发器) 在客户订单表中插入行时,应执行以下操作

  • 在产品\客户\订单中插入行(任何值)

  • 通过删除“产品\分支\库存”列来更新该列 客户订单表上的数量

  • 仅在新分支id(来自insert)的行上执行此操作 在客户订单上)等于 产品\分支机构\库存和新产品\ id(来自 产品(客户订单)上触发的插入等于
    产品分支库存上的产品id

  • 客户订单(客户订单id、订单时间、订单日期、用户名、, 分行(id)

  • 产品\客户\订单(客户\订单\ id、产品\ id、, 数量,)(这是产品和 客户(订单表,因为存在多对多关系)

  • product\u branch\u stock(product\u id,branch\u id,stock)这是我创建的一个表,旨在能够监控每个分支中每个产品的库存)



您可以从触发器内的另一个表中进行选择,并将结果提取到游标或其他变量中。请提供:为所有3个表创建表(可能会跳过与流程无关的列以及除这些表之间的FKs之外的所有非唯一索引);这些表的一些示例数据(足够3-5行)作为INSERT INTO;将数据插入
客户订单
(初始化流程)和所需最终表格数据(格式化表格类型文本)的查询。尽量使所有数值都是唯一的(即,只有在可能的情况下,每个数值可以通过一种方式从初始值中获得)。@Akina首先非常感谢您关注我的问题!我已经按照您的要求使用一些虚拟数据创建表命令。应该可以正常工作,我在mysql的“测试”模式中对其进行了测试。所有表中的虚拟数据都是对齐的,因为它们都有匹配的外键等。我省略了大多数外键的约束(在我的项目中,这些表也与其他不相关的表相链接,因此,当我复制和粘贴它时,自然不允许我在没有父表的情况下更新子表。而且我知道我的代码与触发器代码相比看起来相当混乱,它看起来与注释/问题文本的测试类型相同。有没有办法更改它以使其保持一致看起来像是触发代码?比如,它的颜色和一切?对不起,完全初学者与堆栈溢出太。
    create schema test;
    use test;
    
    CREATE TABLE customer_order (
    customer_order_id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,    # foreign key
    branch_id INT NOT NULL,           # foreign key
    PRIMARY KEY (customer_order_id)
    );
    
    INSERT INTO customer_order (customer_order_id, username, branch_id)
    VALUES  ('1','Paddytheboi101', 2 );
    
    INSERT INTO customer_order (customer_order_id, username, branch_id)
    VALUES  ('2','LuCkYmIkE', 1 );  
    
    INSERT INTO customer_order (customer_order_id, username, branch_id)
    VALUES  ('3','DutchDefence',  1 );
    
    
    
    #intermediary table due to many to many relationship - order can have #multiple products, product can be on multiple orders
    
    CREATE TABLE product_customer_order (
    customer_order_id INT NOT NULL AUTO_INCREMENT, # primary and foreign key
    product_id INT NOT NULL,   # primary and foreign key 
    quantity INT NOT NULL,
    PRIMARY KEY (customer_order_id, product_id),
    FOREIGN KEY (customer_order_id) REFERENCES customer_order (customer_order_id)
    );
    
    INSERT INTO product_customer_order (customer_order_id, product_id, quantity)
    VALUES ('1', '8', '1');
    
    INSERT INTO product_customer_order (customer_order_id, product_id, quantity)
    VALUES ('2', '21', '4');
    
    INSERT INTO product_customer_order (customer_order_id, product_id, quantity)
    VALUES ('3', '32', '3');
    
    
    CREATE TABLE product_branch_stock (
    product_id INT NOT NULL,   # foreign key
    branch_id INT NOT NULL,    # foreign key
    stock INT NOT NULL,
    PRIMARY KEY (branch_id, product_id)
    );
    
    INSERT INTO product_branch_stock (product_id, branch_id, stock)
    VALUES (8,2,10);
    INSERT INTO product_branch_stock (product_id, branch_id, stock)
    VALUES (21,1,10);
    INSERT INTO product_branch_stock (product_id, branch_id, stock)
    VALUES (32,1,10);
DROP TRIGGER IF EXISTS X;
CALL DELIMITER //

CREATE TRIGGER X
AFTER INSERT ON customer_order
FOR EACH ROW
BEGIN

INSERT INTO product_customer_order (product_id, quantity)
VALUES (7, 2);

UPDATE product_branch_stock AS pbs
SET pbs.stock = pbs.stock - new.product_customer_order.quantity
WHERE new.branch_id = pbs.branch_id AND
product_customer_order.product_id = pbs.product_id;

END//