假设我有一个函数set_size()
,它接受一个jsonb并返回该对象的大小。另外,我可以保证任何json对象只被包含在另一个json对象中,并且我有一个函数is_superset(jsonb, jsonb)
,如果前者是后者的父节点则返回true,否则返回false。
说我现在有这样的事情:
SELECT id, CASE WHEN size = 0
THEN SELECT (set_size(container.set)) size
FROM my_table container
WHERE is_superset(container.set, initial.set)
ELSE size
FROM (SELECT set_size(initial.set) size FROM my_table) initial
WHERE initial.id != container.id
这导致missing FROM-clause entry for table "container"
如何重用这样的子查询结果?实现这一结果的合理方法是什么? (例如过滤掉原始选择)
编辑:表格结构:
set | id
------------------------------------------
{} | 1 --size 0
{a: {}} | 2 --size 1, 'contains' first set
{b: {c: {a: 5}} | 3 --size 3
预期结果:
id | size
------------------------
1 | 2
3 | 3
请注意,我知道这并不像jsonb查询那样有很大意义,并且不寻找帮助找到正确的jsonb操作。真正的问题涉及postgis,几何和ST_Area
/ ST_Contains
。但是这个问题以更一般的方式展示了我所遇到的关系问题。