一尘不染

如何连接表行中的所有结果?

sql

找不到解决方案来执行以下操作:

SELECT CONCAT_WS(',', (
    SELECT * FROM table WHERE id = 1
))

如何在PostgreSQL中做到这一点?


阅读 161

收藏
2021-03-08

共1个答案

一尘不染

快速而肮脏:

SELECT t::text FROM tbl t WHERE id = 1;
  • t是表的别名,并非严格需要。您也可以使用原始表名。但是,如果您具有相同名称的列,则该列具有优先权。

  • 因此,t代表表的行类型,该行类型将自动强制为输出的文本表示形式。
    我还添加了一个显式的强制转换, 使其text内部也可以使用-如果您想对其进行任何处理,…
    t::text是SQL标准的Postgres缩写cast (t AS text),您也可以使用它。手册中的详细信息。

  • 您可能需要修剪表示行类型的(单个!)前导和尾括号:

    SELECT right(left(t::text, -1), -1))
    

    FROM tbl AS t
    WHERE id = 1;

  • “脏”,因为您得到Postgres行表示法,所以分隔符恰好是您要求的逗号,但是某些值也被转义和/或在需要时用双引号引起来。

2021-03-08