【问题标题】:How to use a value that came out of select statement in an insert如何在插入中使用来自 select 语句的值
【发布时间】:2020-10-30 15:11:09
【问题描述】:

我想做什么

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

所以我想我可以得到我试图插入的表单的最高版本号,在插入语句中使用它 + 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;
$$;

【问题讨论】:

  • 如果表单还不存在怎么办,在这种情况下你想做什么?
  • 然后它应该创建一个版本号为 1 的表单。但我还没有实现它,因为我可以让它工作

标签: sql postgresql max sql-insert


【解决方案1】:

您可以在单个 insert ... select 语句中执行此操作:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多