【发布时间】:2022-01-22 08:38:05
【问题描述】:
我有一列 text[] 看起来像:
{"FName1 LName1", "FName3 LName3", "FName4 LName4"}
接下来我想将另一个名称数组合并到那个已经存储的数组中,但不要在其中创建任何重复项。我该怎么做?
例如,我想要包含的另一个数组如下所示:
{"FName4 LName4", "FName1 LName1", "FName2 LName2"}
因此,我希望将其存储为:
{"FName1 LName1", "FName2 LName2", "FName3 LName3", "FName4 LName4"}
新数组中的元素可以按任何顺序排列,只要新(创建的)存储数组中没有元素(此处为名称)重复即可。
我找不到可以为我执行此操作的 PostgreSQL 数组函数。我只知道如何附加或前置一个数组(有重复项)。
有没有办法不必先阅读该行?我真的不想先阅读该行。
根据评论编辑:
创建包含测试行示例的表:
CREATE TABLE users (
indexid TEXT PRIMARY KEY,
name_list TEXT[] NOT NULL
);
INSERT INTO users VALUES ('iid_123', '{"FName1 LName1", "FName3 LName3", "FName4 LName4"}')
非常感谢@a_horse_with_no_name 的解决方案,它现在对我有用:
UPDATE users SET name_list=append_unique(name_list, '{"FName4 LName4", "FName1 LName1", "FName2 LName2"}') WHERE indexid = 'iid_123'
文档:
https://www.postgresql.org/docs/current/functions-array.html#ARRAY-FUNCTIONS-TABLE https://www.postgresql.org/docs/current/functions-string.html
【问题讨论】:
-
Edit问题并提供minimal reproducible example,即涉及的表或其他对象的
CREATE语句(粘贴文本,不要使用图像,不要链接到外部站点),INSERT用于示例数据的语句 (dito) 以及带有表格文本格式的示例数据的所需结果。 -
使用适当的规范化数据模型会容易得多
标签: arrays postgresql sql-update