Я пытаюсь создать объект JSON заклиненный на children.id
колонки:Попытки ссылаться на неоднозначный столбец в подзапросе
SELECT
format('{%s}',
string_agg(
format(
'%s:%s',
to_json(children.id),
row_to_json(t)
), ','
), ''
)::json as json_object
FROM (
SELECT
children.id,
children.first_name,
children.last_name,
parents.id,
parents.first_name,
parents.last_name
FROM
children
LEFT OUTER JOIN
parents ON parents.id = children.parent_id
ORDER BY
LOWER(children.last_name),
LOWER(children.first_name)
) t
Каким будет возвращать результат, как
{
"1": {
"id": "1",
"first_name": "Joe",
...
}
}
Однако я получаю ошибка:
ERROR: missing FROM-clause entry for table "children"
LINE 6: to_json(children.id),
^
Я не уверен, где поставить еще одну ссылку на «детей».
Я не хочу прибегать к наложению столбца id, например. children.id AS child_id
потому что губит выход, т.е .:
{
"1": {
"child_id": "1", <----- NO GOOD
"first_name": "Joe",
...
}
}
это может быть сделано?
Unrelated, но: почему вы не используете 'json_agg()' и 'json_build_object()' вместо вложенности формат '()' и 'string_agg()'? –
@a_horse_with_no_name У меня еще нет опыта работы с функциями json. Будет ли это создавать ту же структуру и объект, на который вводится идентификатор каждой строки? – jemminger