我遇到了一个问题,用另一个数组中不存在的值更新数组的元素。
具体来说,考虑下表tbl1,它看起来有点像这样:
+-----------------------------------+
| c1 | c2 | c3 | c4 |
+-----------------------------------+
| A | B | C | [1, 2, 3] |
|-----------------------------------|
假设我想c4使用以下数据更新列:[2, 3, 4]。c4我希望更新的值为[1, 2, 3, 4]
到目前为止,我尝试了以下方法:
INSERT INTO
tbl1 (
c1, c2, c3, c4
)
VALUES ....
ON CONFLICT (c1, c2) DO UPDATE
SET c3=EXCLUDED.c3,
c4=(SELECT ARRAY_AGG(x ORDER BY x) FROM (SELECT DISTINCT UNNEST(ARRAY_CAT(c4, EXCLUDED.c4)) AS x) AS s)
但是,该查询似乎不合法。执行时出现语法错误,指出我不能SELECT在SET语句中使用。
我也有几个限制:
- 我必须更新值
on conflict - 我无法在数据库中创建辅助函数
- 它必须是单个查询