我正在尝试在 2 个不同表中的 2 个 jsonb 数组之间进行连接。链接它们的 id 位于数组内部。
这是我尝试过的,我在 postgres 上创建了一个函数,它返回一个 Id 列表(来自表 B),我试图将它们与表 A 匹配。
TableA
ID | resultA
1 | {records:[{id: 1, key: A, value: High}, {id: 2, key: B, value:Low}]}
TableB
ID | resultB
2 | {records:[{key: A, value: New Equipment}, {key: B, value: Old Equipment}]
Run Code Online (Sandbox Code Playgroud)
所以我得到了 SQL 来显示两个 Id 的 2 列
select elem-> 'key' as TableA_id from TableA, lateral jsonb_array_elements(resultA -> 'records') elem
where elem-> 'key' in (public.myfunction('999'))
Run Code Online (Sandbox Code Playgroud)
我遇到以下错误: WHERE 中不允许设置返回函数
不知道这里出了什么问题。
虽然 WHERE 子句中的子查询可以工作,但为什么不在返回集合的函数上执行 INNER JOIN 呢?
\n\nSELECT elem->>\'key\' AS TableA_id\nFROM TableA\n CROSS JOIN LATERAL jsonb_array_elements(TableA.resultA->\'records\') AS elem\n INNER JOIN public.myfunction(\'999\') AS func(key) ON (func.key = elem->>\'key\');\n
Run Code Online (Sandbox Code Playgroud)\n\n另外,您真的想要返回 jsonb 值吗?我不禁认为您是想返回文本。
\n\nelem->\'key\'
将返回 jsonb 值,同时elem->>\'key\'
将键作为文本返回。我上面的示例返回看起来最合适的文本。
如果你确实想保留 WHERE 子句\xe2\x80\xa6
\n\nSELECT elem->>\'key\' AS TableA_id\nFROM TableA\n CROSS JOIN LATERAL jsonb_array_elements(TableA.resultA->\'records\') AS elem\nWHERE elem->>\'key IN (SELECT * FROM public.myfunction(\'999\'));\n
Run Code Online (Sandbox Code Playgroud)\n\n就我个人而言,我更喜欢第一种带有 INNER JOIN 的形式。
\n 归档时间: |
|
查看次数: |
24009 次 |
最近记录: |