Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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
Sql 更新未在Postgres触发器中应用条件_Sql_Database_Postgresql - Fatal编程技术网

Sql 更新未在Postgres触发器中应用条件

Sql 更新未在Postgres触发器中应用条件,sql,database,postgresql,Sql,Database,Postgresql,我有三张这样的桌子: 订单(产品id(外键)、人员id(外键)、订单数量) 产品(产品标识(主键)、价格) 零售商(人员id(主键),佣金) 我正试图创建一个触发器,在他帮助下下下的每一笔订单都会增加零售商的佣金 这是我的触发器代码。但它似乎有一个bug,每次插入都会更新Retailers表中的每一条记录(或导致Retailers表中错误结果的其他bug) CREATE OR REPLACE FUNCTION update_commission() RETURNS TRIGGER AS $tab

我有三张这样的桌子:

订单(产品id(外键)、人员id(外键)、订单数量)

产品(产品标识(主键)、价格)

零售商(人员id(主键),佣金)

我正试图创建一个触发器,在他帮助下下下的每一笔订单都会增加零售商的佣金

这是我的触发器代码。但它似乎有一个bug,每次插入都会更新Retailers表中的每一条记录(或导致Retailers表中错误结果的其他bug)

CREATE OR REPLACE FUNCTION update_commission() RETURNS TRIGGER AS $table$
BEGIN
    update "Retailers" rt
    set commission = commission + (res.order_count * res.price * 0.005)
    from
    (select r.personnel_id, o.order_count, p.price from
    "Orders" o left join "Retailers" r
        on r.personnel_id = o.personnel_id
    left join "Products" p
        on o.product_id = p.product_id) as res
    where NEW.personnel_id = res.personnel_id;
    return NEW;
END;

$table$ LANGUAGE plpgsql;

CREATE TRIGGER new_order
  AFTER INSERT
  ON "Orders"
  FOR EACH ROW
  EXECUTE PROCEDURE update_commission();