【发布时间】:2021-08-09 21:40:54
【问题描述】:
这是previous question 的后续报道。理解 PostgreSQL 查询中涉及 JSON 函数时返回的内容会导致难以实施看似有效的解决方案。
下面的查询运行完成,并按预期返回一列三行。
SELECT x.y->'c' as c
from json_array_elements('[
{"c": "str1"},
{"c": "str2"},
{"c": "str3"}
]') x(y)
但是,如果我尝试将上述内容作为子查询运行,无论是作为 EXISTS 语句的一部分还是作为 JOIN,都会出现错误。这是JOIN版本...
SELECT fldc
FROM table t
LEFT JOIN (SELECT x.y->'c' as c
from json_array_elements('[
{"c": "str1"},
{"c": "str2"},
{"c": "str3"}
]') x(y)) as z
ON z.c = t.fldc
LIMIT 100
子查询的SELECT语句中带有单箭头,如上图,错误信息为ERROR: operator does not exist: json = character varying Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
带有双箭头,即SELECT x.y->>'c' as c,错误信息为ERROR: Function 'JSON_ARRAY_ELEMENTS' is not supported in this context.
(PostgreSQL 是从 Dataiku 的 Data-Science Studio (DSS) 运行的,所以我相信这些错误消息是由 DSS 生成的,而不是直接来自 PostgreSQL)。
我认为一旦生成了 SELECT 语句的输出,它就像任何其他 SELECT 语句的输出一样,即如果子查询可以作为独立查询运行,它应该可以顺利地适应更大的查询.任何人都可以就这里发生的事情的实践和理论提供帮助,以及是否需要和/或预期额外的数据转换或转换?
【问题讨论】:
标签: sql json postgresql dataiku