Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres删除具有相同ID的多行_Sql_Postgresql - Fatal编程技术网

Sql Postgres删除具有相同ID的多行

Sql Postgres删除具有相同ID的多行,sql,postgresql,Sql,Postgresql,我有一个简单的表,带有一个ID和一些空格分隔的段: id | segments -------------------------------+----------------------- 2A3A3362051D43-6000014002B3C4 | 73024 73025 2A399D20051D96-4000010002782A | 96878 92779 73024 73025 2A3747D3051DE0-400001

我有一个简单的表,带有一个ID和一些空格分隔的段:

                     id        |   segments
-------------------------------+-----------------------
 2A3A3362051D43-6000014002B3C4 | 73024 73025
 2A399D20051D96-4000010002782A | 96878 92779 73024 73025
 2A3747D3051DE0-40000100032E40 | 139313
 29C1D823851DDF-400001200FD641 | 139313
问题是,其中一些ID重复:

                 id            |         segments
-------------------------------+--------------------------
 27295CD0851AB2-400000E01059BF | 139313
 27295CD0851AB2-400000E01059BF | 139313
 27295CD0851AB2-400000E01059BF | 139313 92779 73024 73025
 27295CD0851AB2-400000E01059BF | 139313
 27295CD0851AB2-400000E01059BF | 139313

问题是如何删除不必要的行,每个ID只保留一行,同时保留所有段(它们是随机的,我必须保留每一行),段存储为文本,因此简单的字符串连接将起作用。

这是一种非常糟糕的数据格式。您应该有一个单独的表,每个id和每个段有一行。将事物列表存储在单独的列表中并没有充分利用关系数据库。将数值存储为字符串更糟糕

这就是说,有时您会被特定格式的数据所困扰。您可以取消字符串的测试,获取不同的值,然后重新聚合以执行所需的操作:

select id, string_agg(segment, ' ')
from (select distinct id, unnest(string_to_array(segments, ' ')) as segment
      from t
     ) t
group by id;

假设您有一个简单的文本列:

SELECT id, string_agg(DISTINCT seg) AS segments
FROM   tbl
     , unnest(string_to_array(segments, ' ')) seg
GROUP  BY 1;
在第9.3页中,与其调用
选择
列表中的集合返回函数,不如使用
横向
连接。有关答案及详情:


考虑您的表布局。

您的表定义(
\d tbl
在psql中)?你对博士后的看法?在
段中合并数组(我想)可以吗?我同意这是一种糟糕的格式,但这是我必须处理的。您的解决方案有效,谢谢!