postgresql - PostgreSQL Insert into with case and concat
问题描述
我正在尝试创建一个插入触发器,它将从表 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”,并在 B 的 z 中从 A 中放置 z,但我收到错误“插入的表达式比目标列”。有人知道我做错了什么吗?
解决方案
您的外部选择列表包含三个术语 -y
和表达式,只需删除z
并重新排序另外两个,您应该就可以了:case
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]
推荐阅读
- android - 如何使用配置解决资源'attr/max_value'的重复值我已经尝试过stackover答案但它不起作用
- java - 根据变量创建类的实例
- twig - 在 Twig Opencart 中渲染多维数组中的元素
- python - 更新 Anaconda 失败并出现删除错误
- python - FTPS 文件传输到远程时握手操作超时
- shell - 在特定位置将字符串从小写替换为大写
- python - ModuleNotFoundError:没有名为“sklearn.grid_search”的模块
- hadoop - 如何将包含空格的列名传递给 sqoop --map-column-java
- javascript - 值未选择角度 6
- php - 下拉列表中的 if 语句取决于数据库值和用户登录