【问题标题】:PostgreSQL integer array value join to integer in other table with desc stringPostgreSQL 整数数组值使用 desc 字符串连接到其他表中的整数
【发布时间】:2015-08-29 06:31:39
【问题描述】:

我有一个表 test 列,其中包含 int 数组和值,例如 {1000,4000,6000}{1000}{1000,4000} 称为 ekw。 这些值与另一个表中的描述字符串匹配

tab: test
id | name   | ekw
-----------------
 1 |  One   | {1000}
 2 |  Two   | {1000,4000}
 3 |  Three | {1000,4000,6000}

tab: ekwdesc
id | value  | desc
-----------------
 1 |  1000  | Max
 2 |  2000  | Tim
 3 |  3000  | Rita
 5 |  4000  | Sven
 6 |  5000  | Tom
 7 |  6000  | Bob

是否可以选择这些列并打印字符串?

类似:

select name, ekw from test, ekwdesc

我想看看这个结果:

id | name   | ekwdesc
-----------------
 1 |  One   | Max
 2 |  Two   | Max, Sven
 3 |  Three | Max, Sven, Bob

我尝试使用 IN 和 ANY,但无法正常工作。

【问题讨论】:

    标签: sql arrays postgresql select postgresql-9.1


    【解决方案1】:

    您使用any 运算符进行连接的想法是正确的。连接完成后,剩下的就是使用string_agg 将结果转换为您想要的格式:

    SELECT   name, STRING_AGG(description, ', ')
    FROM     test
    JOIN     ekwdesc ON ekwdesc.value = ANY(test.ekw)
    GROUP BY name
    

    有关可执行示例,请参阅附件SQLFiddle

    【讨论】:

    • 这是否确保描述标签将以正确的顺序返回——ekw 数组中值的顺序?
    • @Sigfried Nope.
    • 如果主表有 json 字段,这个解决方案可以改变吗?如您所知,您不能将 group by 用于 json 列。
    • @eyeinthebrick 不确定我明白你在问什么。您能否在新问题陈述中发布一个新问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2017-10-29
    • 2011-08-16
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多