如何在插入中使用来自 select 语句的值

How to use a value that came out of select statement in an insert

我想做什么

在插入表单时,我想检查该表单是否不存在。 如果它存在我想给插入一个更高的版本号。

所以我想我可以获得我试图插入的表单的最高版本号,在插入语句中使用它 + 1。

但是它不起作用,我无法让它工作

CREATE OR REPLACE FUNCTION check_form_insert()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN

    IF (SELECT EXISTS(
        SELECT *
        FROM form
        WHERE (name = NEW.name)
        )
    )
    THEN
        SELECT f.versionnumber
        FROM form f
        WHERE CONCAT(versionnumber, f.name) in (
            SELECT CONCAT(MAX(versionnumber), name)
            FROM form
            GROUP BY name
        ) AND name = NEW.name;

        INSERT INTO form (versionnumber, name, state, timestamp)
        VALUES(
            f.versionnumber + 1,
            NEW.name,
            1,
            NOW()
        );


    END IF;
    RETURN null;
END;
$$;

您可以在一个 insert ... select 语句中完成此操作:

insert into form (versionnumber, name, state, timestamp)
select coalesce(max(versionnumber), 0) + 1, , 1, now()
from form
where name = ;

逻辑是在table(默认为0)中搜索表单的最后一个版本号,并递增。

是查询的参数,应该给出表单名称。我怀疑你需要一个触发器来做你想做的事。