首页 > 解决方案 > 表“产品”缺少 FROM 子句条目

问题描述

CREATE OR REPLACE FUNCTION update_sellstatus()
  RETURNS trigger AS
$body$
BEGIN
    if products."sellStatus" = "Sold" then
            update auctions
            set "auctionStatus" = "End"
            where (products."id" = auctions."idProduct");
        end if;
END
$body$
language plpgsql

create trigger update_sellStatus_auctionStatus
after update on products
for each row
    execute procedure update_sellstatus()

错误:表“产品”缺少 FROM 子句条目

我想在(产品。“id”=拍卖。“idProduct”)的列auctions.auctionStatus = "End"之后更新列。UPDATEproducts.sellStatus = "Sold"

所以我创建了一个触发器,但我得到了一个错误。这让我无法更新表产品

标签: postgresqlfunctiontriggers

解决方案


您不能像在函数中那样引用表。但因为这是一个触发器。如手册中所述,您可以使用记录访问更新行的值new

另外:在 SQL 中字符串常量需要用单引号括起来,双引号只需要用于标识符(应该像瘟疫一样避免)。
"Sold"指一列,'Sold'是一个字符(字符串)值

CREATE OR REPLACE FUNCTION update_sellstatus()
  RETURNS trigger AS
$body$
BEGIN
  if new."sellStatus" = 'Sold' then
    update auctions
      set "auctionStatus" = 'End'
    where auctions."idProduct" = new."id";
  end if;
END
$body$
language plpgsql

推荐阅读