如何在Postgres中的连接结果子查询上使用字符串聚合?

时间:2018-01-18 15:18:03

标签: postgresql subquery concatenation

我正在尝试对包含连接结果的子查询的结果使用字符串聚合。我想为Postgres中的数据库模式创建一个包含限定名称“schema.table”的长文本字符串。你知道怎么做吗?它说,下面是我提出的代码(不工作) 用作表达式的子查询返回的多行。

SELECT string_agg(
    (SELECT CONCAT(table_schema, '.', table_name) table_schema_name
    FROM information_schema.tables
    WHERE table_schema = 'name_of_schema'), ' ')
FROM information_schema.tables
WHERE table_schema = 'name_of_schema'

我现在拥有的是:

| table_schema_name | 

name_of_schema.table1
name_of_schema.table2
name_of_schema.table3

我想要达到的目标是:

|                          agrreagated field                     |

name_of_schema.table1 name_of_schema.table2 name_of_schema.table3

2 个答案:

答案 0 :(得分:1)

此查询应该执行您要求的任务:

SELECT string_agg(CONCAT(table_schema, '.', table_name), ' ')
    FROM information_schema.tables
    WHERE table_schema = 'schema_name'

答案 1 :(得分:0)

您应该在外部选择中使用查询作为表格表达式:

SELECT string_agg(s.table_schema_name, ' ') FROM (
    SELECT CONCAT(table_schema, '.', table_name) AS table_schema_name
    FROM information_schema.tables
    WHERE table_schema = 'public'
) s

或简单地避免子选择:

SELECT string_agg(CONCAT(table_schema, '.', table_name), ' ')
FROM information_schema.tables
WHERE table_schema = 'public';