我正在尝试编写一个在联接中使用集合返回函数的输出的查询,但似乎无法发现正确的语法,所以我想知道其他人是否有任何建议?
我有一个表列,其中包含以下形式的数据
{"manuscripts": [{"documentId": 39645, "journalAcronym": "MPB"}, {"documentId": 12123, "journalAcronym": "MPB"}]}
并希望在后续查询中使用 documentId 字段。我可以使用查询成功提取字段
select (jsonb_array_elements(manuscripts->'manuscripts')::json->>'documentId')::int from someTable
产生
但是,当我尝试将结果合并到表单的连接条件中时
join someOtherTable sot on someCondition
and sot.document_id in ((jsonb_array_elements(manuscripts->'manuscripts')::json->>'documentId')::int)
我收到以下错误
尽管进行了一些谷歌搜索,我似乎无法发现将集合转换为可以在“IN”中使用的语法。有人能指出我正确的方向吗?
感激不尽的任何/所有想法...
我倾向于避免在子句中调用返回集合的函数,
SELECT
因为它们隐式地成为横向连接,这感觉很狡猾 - 最好是明确的:JOIN
正如您所发现的,隐式横向连接在条件(或WHERE
子句)中不起作用- 表达式需要计算为单个布尔值,而不是一组布尔值。在您的情况下,您可以将设置返回函数调用扩展为单独的连接
或使用运算符的子查询
IN
: