将JSON结果连接到单列postgresql

时间:2014-05-22 16:42:07

标签: sql json postgresql postgresql-json

所以,目前我在表中有两列,其中一列包含JSON文档,如下所示:

        CID:
        2
        Name:
        {"first" : "bob","1" : "william", "2" : "archebuster", "last" : "smith"}    

当我使用以下方法搜索此列时

  SELECT "CID", "Name"->>(json_object_keys("Name")) AS name FROM "Clients" WHERE 
  "Name"->>'first' LIKE 'bob' GROUP BY "CID";

我明白了:

  CID | name
--------------
  2   | bob
  2   | william
  2   | archebuster
  2   | smith

我真的想要的时候:

 CID | name
  2  | bob william archebuster smith

我将如何做到这一点?我是postgresql中的JSON新手。 我已经尝试过string_agg并且它不起作用,大概是因为我在json专栏中工作,尽管事实是' - >>'应该键入将结果设置为字符串

更新

enter image description here

1 个答案:

答案 0 :(得分:3)

首先,您需要了解,如果在SELECT子句中包含set-returns函数,则会创建隐式LATERAL CROSS JOIN

您的查询实际上是这样的:

SELECT "CID", "Name"->>"key" AS name
FROM "Clients"
CROSS JOIN LATERAL json_object_keys("Name") AS "foo"("key")
WHERE "Name"->>'first' LIKE 'bob'
GROUP BY "CID", "Name"->>"key"

如果您真的想这样做,可以在此处应用聚合函数(可能是array_aggstring_agg)。

SQLFiddle