我有一个表,该表的列名为“ ids ”(字符串类型)。有人可以告诉我如何删除每一行中重复的值吗?
示例,表格为:
--------------------------------------------------
primary_key | ids
--------------------------------------------------
1 | {23,40,23}
--------------------------------------------------
2 | {78,40,13,78}
--------------------------------------------------
3 | {20,13,20}
--------------------------------------------------
4 | {7,2,7}
--------------------------------------------------
,我想将其更新为:
--------------------------------------------------
primary_key | ids
--------------------------------------------------
1 | {23,40}
--------------------------------------------------
2 | {78,40,13}
--------------------------------------------------
3 | {20,13}
--------------------------------------------------
4 | {7,2}
--------------------------------------------------
我在postgres中写道:
UPDATE table_name
SET ids = (SELECT DISTINCT UNNEST(
(SELECT ids FROM table_name)::text[]))
在sqlalchemy中,我写道:
session.query(table_name.ids).\
update({table_name.ids: func.unnest(table_name.ids,String).alias('data_view')},
synchronize_session=False)
这些都不起作用,所以请帮助我,谢谢!
答案 0 :(得分:1)
我认为您可以通过将这些id存储在另一个表中(每行一个id)并使用引用table_name.primary_key
的外键来改进设计。
还将Array数据存储为文本字符串似乎很奇怪。
无论如何,这是一种实现方法:我用内部子选择包装了UNNEST
返回的集合,以便能够应用再次连接字符串所需的gregation_function。
UPDATE table_name
SET ids = new_ids
FROM LATERAL (
SELECT primary_key, array_agg(elem)::text AS new_ids
FROM (SELECT DISTINCT primary_key, UNNEST(ids::text[]) as elem
FROM table_name ) t_inner
GROUP by primary_key )t_sub
WHERE t_sub.primary_key = table_name.primary_key