Sql 重用子查询进行筛选

Sql 重用子查询进行筛选,sql,postgresql,Sql,Postgresql,假设我有一个函数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

假设我有一个函数
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
这导致表“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_区域
/
ST_包含的内容
。但这个问题以更一般的方式说明了我的关系问题。

size
is
my_table
column?。。请放置一些示例数据和一些预期结果,以提供模拟模式/结果