所以,目前我在表中有两列,其中一列包含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专栏中工作,尽管事实是' - >>'应该键入将结果设置为字符串
更新
答案 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_agg
或string_agg
)。