Postgresql 在postgres中使用for循环和if语句
这怎么不起作用?基本上,这个过程将更新主买家表中的列,以检查用户是否在其他表中有数据Postgresql 在postgres中使用for循环和if语句,postgresql,stored-procedures,Postgresql,Stored Procedures,这怎么不起作用?基本上,这个过程将更新主买家表中的列,以检查用户是否在其他表中有数据 DO language plpgsql $$ DECLARE buyer integer; BEGIN FOR buyer IN SELECT id FROM buyers LOOP IF (SELECT count(*) FROM invoice WHERE buyer_id = buyer) > 0 THEN UPDATE buye
DO language plpgsql $$
DECLARE
buyer integer;
BEGIN
FOR buyer IN SELECT id FROM buyers
LOOP
IF (SELECT count(*) FROM invoice WHERE buyer_id = buyer) > 0 THEN
UPDATE buyers SET has_invoice = true WHERE id = buyer;
ELSE
UPDATE buyers SET has_invoice = false WHERE id = buyer;
END IF;
END LOOP;
RETURN;
END;
$$;
目前尚不清楚什么是“不起作用”。无论哪种方式,请使用此等效的UPDATE
语句:
UPDATE buyers b
SET has_invoice = EXISTS (SELECT 1 id FROM invoice WHERE buyer_id = b.id);
如果不需要冗余存储来提高性能,则可以使用或生成的列来实现相同的目的。然后,has\u invoice
列将动态计算,并且始终是最新的。此密切相关答案中的说明:您不需要循环,只需一条update语句就可以完成(效率更高)。此外,如果在另一个连接更新
发票
表时运行此操作,可能会产生错误的结果。您需要考虑并发性,或者使用表锁以便可以忽略它。