使用 Postgres:
SELECT users."name" AS "name"
, array_to_json(array_agg(sites)) as sites
FROM remodel.users AS users
JOIN remodel.user_sites AS user_sites
ON users.id=user_sites.user
JOIN remodel.sites AS sites
ON sites.id=user_sites.site
GROUP BY "users".id
;
Run Code Online (Sandbox Code Playgroud)
目前生产
SELECT users."name" AS "name"
, array_to_json(array_agg(sites)) as sites
FROM remodel.users AS users
JOIN remodel.user_sites AS user_sites
ON users.id=user_sites.user
JOIN remodel.sites AS sites
ON sites.id=user_sites.site
GROUP BY "users".id
;
Run Code Online (Sandbox Code Playgroud)
但是我不想在 JSON 输出中有“id”字段。
将站点选择更改为
array_to_json(array_agg(row(sites."name", sites.created))) as sites
Run Code Online (Sandbox Code Playgroud)
导致字段失去名称
"Toby";"[{"id":1,"name":"Village","created":"2015-08-10T15:22:36.622298"},
{"id":2,"name":"Manor","created":"2015-08-10T15:22:43.614551"}]"
"Amy";"[{"id":3,"name":"Park","created":"2015-08-10T15:22:48.810872"}]"
"Anne";"[{"id":2,"name":"Manor","created":"2015-08-10T15:22:43.614551"},
{"id":1,"name":"Village","created":"2015-08-10T15:22:36.622298"},
{"id":3,"name":"Park","created":"2015-08-10T15:22:48.810872"}]"
Run Code Online (Sandbox Code Playgroud)
并尝试(这将是一个可怕的)子选择
, array_to_json(array_agg((SELECT "name", created FROM …
Run Code Online (Sandbox Code Playgroud)