0

如何在 pgsql 选择查询中用撇号/单引号替换逗号?我目前的查询是:

SELECT array_to_string(array_agg(districtname), ', ') as dnames
FROM districts
where id in ('' || Replace((select districtIds from tblmtr where id = 1), ',' , ''',''') || '');

它返回空值。
表中的IDtblmtr是这样23,,4

当我将其更改为 only 2or 3or4时,它会返回正确的结果。
结果应该是这样的:district1name,district2name,district3name

4

1 回答 1

1

这里有几件事并不理想:

  • 升级到现代版本的 Postgres。8.4 版于 2014 年达到 EOL。

  • 查看数据库规范化并重新考虑您的关系设计。在逗号分隔的字符串中存储多个 ID 值通常是一个非常糟糕的主意。

  • IN会期望一个子查询或一个值列表。您似乎尝试提供一个包含值的字符串,但这是行不通的。考虑一个JOIN代替你笨拙的IN结构。

在坚持您不幸的设计时,将逗号分隔的字符串动态转换为数组并使用ANY构造
您忽略了提供表定义,因此做了一些假设。

SELECT array_to_string(array_agg(d.districtname), ', ') AS dnames
FROM   tblmtr    t 
JOIN   districts d ON d.id = ANY (string_to_array(t.districtIds, ','))
WHERE  t.id = 1;

或者:

SELECT ARRAY (
   SELECT d.districtname
   FROM   tblmtr    t 
   JOIN   districts d ON d.id = ANY (string_to_array(t.districtIds, ','))
   WHERE  t.id = 1
   ) AS dnames;
于 2016-03-06T02:34:38.277 回答