我的数据库(PostgreSQL 9.4.18)中有一个现有的users
表,我正在修改它:
ALTER TABLE users
ADD COLUMN IF NOT EXISTS groups INT[];
到目前为止一切顺利。
我有一个SQL语句,它使用array_append()
为我的用户添加组:
// NOTE: this bit prevents duplicate entries and casts to integer value --> NOT (groups @> ARRAY[?]::INT[])
UPDATE users
SET groups = array_append(groups, ?)
WHERE NOT (groups @> ARRAY[?]::INT[])
AND id = ?
这条语句可以正常工作--但仅当所选用户将groups
定义为数组时。
如果匹配的用户没有定义groups
数组(null?),则该语句将不执行任何操作。
# SELECT id, groups FROM users WHERE id=11111;
id | groups
-------+-------
11111 |
(1 row)
我的问题是:
如果一个空数组不存在,如何修改SQL语句以首先创建一个空数组?
我试过使用像COALESCE()
这样的函数注入一个空数组作为默认值,但没有任何运气......但我可能只是没有正确地处理这个问题。
帮忙?
1条答案
按热度按时间vd2z7a6w1#
可以使用
coalesce()
创建一个空数组,并将新值追加到该数组中:注意,
NOT (groups @> ARRAY[?]::INT[])
可以简化(在我看来)为? <> all(groups)