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
ismy_table
column?。。请放置一些示例数据和一些预期结果,以提供模拟模式/结果