Json 试图引用子查询中的不明确列
我正在尝试构建一个JSON对象,该对象键入Json 试图引用子查询中的不明确列,json,postgresql,subquery,Json,Postgresql,Subquery,我正在尝试构建一个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, child
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)别名为child\u id
),因为这会破坏输出,例如:
{
"1": {
"child_id": "1", <----- NO GOOD
"first_name": "Joe",
...
}
}
{
"1": {
“child_id”:“1”,别名children
在子查询中。您只能访问t
。也许您打算:
SELECT format('{%s}',
string_agg(format('%s:%s', to_json(t.id), row_to_json(t)
-------------------------------------------------^
), ','
), ''
)::json as json_object
. . .
在子查询中,您应该具有唯一的名称:
SELECT children.id as child_id,
children.first_name as child_first_name,
children.last_name as child_last_name,
parents.id as parent_id,
parents.first_name as parent_first_name,
parents.last_name as parent_last_name
事实上,我很惊讶Postgres没有像许多其他数据库那样,在子查询中使用重复的列名生成编译错误。子查询输出包含两列,分别命名为id
,和两列
命名为first\u name
和last\u name
。重命名parents
表列和
然后可以将t.id
用作to_json()
参数
SELECT
format('{%s}',
string_agg(
format(
'%s:%s',
to_json(t.id),
row_to_json(t)
), ','
), ''
)::json as json_object
FROM (
SELECT
children.id,
children.first_name,
children.last_name,
parents.id AS parent_id,
parents.first_name AS parent_first_name,
parents.last_name AS parent_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
是的,我试过了,但它告诉我't.id'不明确。不相关,但是:为什么不使用json\u agg()
和json\u build\u object()
而不是嵌套format()
和string\u agg()
?@a_-horse_和_-no_-name我对json功能还没有太多经验。这会产生相同的结构,并由每行的ID设置对象键吗?