PostgreSQL插入语句中使用case和concat

4

我正在尝试创建一个插入触发器,它将从表A中获取两个字符串字段(x和y),并将它们连接成表B中的单个字段。如果y不为空,我想在连接时在x和y之间添加一个“ - ”。到目前为止,我的代码看起来像这样:

BEGIN
    INSERT INTO B(xy,z)
        SELECT y,z,
            CASE WHEN y IS NOT NULL then concat('some prefix',x,' - ',y)
                ELSE concat('some prefix',x)
            END
        FROM(SELECT NEW.x, NEW.y NEW.z) as n;
        WHERE [some conditions]
    RETURN NEW;
END;

据我理解,在B表的xy字段中应该放置“一些前缀x-y”或“一些前缀x”,并将A表的z放置在B表的z中,但我收到了“插入的表达式比目标列多”的错误提示。有人知道我做错了什么吗?

1个回答

4

你的外部选择列表有三个条件——yzcase表达式,只需删除y并重新排列其他两个条件,就可以了:

INSERT INTO B(xy,z)
SELECT
    CASE WHEN y IS NOT NULL then concat('some prefix',x,' - ',y)
        ELSE concat('some prefix',x)
    END, -- First expression, goes into b.xy
    z -- SEcond expression, goes into b.z
FROM(SELECT NEW.x, NEW.y NEW.z) as n;
WHERE [some conditions]

1
哇,这真是太快了,而且非常清晰和有效!我不知道大小写被视为选择条件,谢谢! - GabSP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接