PostgreSQL如何直接查询两列所有唯一值并返回列表?
用PostgreSQL直接获取两列的所有唯一值列表
你可以通过合并两列数据再去重的方式,直接用SQL得到目标结果:
SELECT DISTINCT value FROM ( -- 注意`from`是PostgreSQL关键字,必须用双引号包裹避免语法错误 SELECT "from" AS value FROM database UNION ALL SELECT "to" AS value FROM database ) AS combined_values;
如果想直接得到数组格式的结果(和你期望的列表结构更匹配),可以用ARRAY_AGG函数把结果聚合为数组:
SELECT ARRAY_AGG(DISTINCT value ORDER BY value) AS unique_values FROM ( SELECT "from" AS value FROM database UNION ALL SELECT "to" AS value FROM database ) AS combined_values;
为什么原来的查询不符合需求?
你之前的SELECT DISTINCT from,to FROM database是对两列的组合做去重,所以会把('a','b')和('b','a')当成不同的组合保留,但这不是你要的单个值的去重结果。上面的子查询先把两列所有值合并到同一列,再做去重,就能拿到所有出现过的唯一单个值。
内容的提问来源于stack exchange,提问作者falkan
相关产品推荐
相关产品推荐

