Database 在Postgres中触发以使用其他表中的最小值更新主表中的列

Database 在Postgres中触发以使用其他表中的最小值更新主表中的列,database,postgresql,plpgsql,Database,Postgresql,Plpgsql,使用PostgreSQL 9.3.6 我有三张桌子 CREATE TABLE main (sno int, ID varchar, A int); CREATE TABLE aux_1 (ID varchar, b int); CREATE TABLE aux_2 (ID varchar, c int); 目标:确保主表A列中的值=aux_1表b列中的最小值与aux_2表c列中的值。图示如下- 我的尝试:我创建了以下名为min_compare的函数来完成主表的自动更新 DECLARE id_t

使用PostgreSQL 9.3.6

我有三张桌子

CREATE TABLE main (sno int, ID varchar, A int);
CREATE TABLE aux_1 (ID varchar, b int);
CREATE TABLE aux_2 (ID varchar, c int);
目标:确保主表A列中的值=aux_1表b列中的最小值与aux_2表c列中的值。图示如下-

我的尝试:我创建了以下名为min_compare的函数来完成主表的自动更新

DECLARE
id_temp VARCHAR;
b_temp INTEGER;
c_temp INTEGER;
min_value INTEGER;

BEGIN
FOR r IN 1 .. 100
LOOP
SELECT INTO id_temp main."ID" FROM main WHERE sno = r;
SELECT INTO b_temp aux_1.b FROM aux_1 WHERE aux_1."ID" = id_temp;
SELECT INTO c_temp aux_2.c FROM aux_2 WHERE aux_2."ID" = id_temp;

IF b_temp > c_temp THEN min_price := c_temp;
ELSE min_price := b_temp;
RETURN min_price;
END IF;
UPDATE main SET "a" = min_price WHERE "ID" = id_temp;
END LOOP;
END;
表aux_1的触发器

CREATE TRIGGER min_value AFTER UPDATE ON aux_1 FOR EACH ROW EXECUTE PROCEDURE min_compare();
表aux_2的触发器

CREATE TRIGGER min_value AFTER UPDATE ON aux_2 FOR EACH ROW EXECUTE PROCEDURE min_compare();
问题:当我更新表aux_1的b列和/或表aux_2的c列时,主表A列中的相应值不更新


我完全是postgresql和plpgsql的新手。请原谅,如果这是一个完全愚蠢的问题,但我试图搜索各地,以达到这一阶段,现在我完全卡住了。请提供帮助。

您能稍微澄清一下这句话吗:为了确保主表a列中的值=辅助1表b列中的最小值与辅助2表c列中的值相比,如果您确定所有ID值的辅助1和辅助2中只有非空值,请举个例子,您可以将代码替换为一个select-select LEASTp.b,q.c从aux_1作为p连接aux_2作为p.id=q.id上的q连接主作为p.id=s.id和s.sno=r上的s。如果辅助表中可以有多条记录,也可以使用MIN函数。@e4c5这里是一个有示例的图像链接。我没有在这里发布图片的声誉,所以不能在这里发布。在这件事上请容忍我。谢谢-@Jayadevan select查询如何更新表中的列?请参考前面评论中的链接以查看问题示例。谢谢。我是说你的3个select查询可以替换为一个select查询。是,选择查询也可用于更新列。查看示例更新帐户集contact\u last\u name,contact\u first\u name=从salesmen中选择last\u name,first\u name,其中salesmen.id=accounts.sales\u id;在