其中一个SQL查询反复使用相同的表名-
例如-
select
rr.jdoc as child_node, json_agg(parent_rr.jdoc)::jsonb as parent_node , array_length(array_agg(parent_rr.jdoc)::jsonb[], 1) as count
from MYTABLE rr, MYTABLE parent_rr
where
parent_rr.jdoc @> (rr.jdoc->'somefield')::jsonb
group by rr.jdoc
UNION
select rr.jdoc, NULL as parent_id, null as pcount
from MYTABLE rr where
not (rr.jdoc ?? 'somefiled')
and ((rr.jdoc->'crazyfiled'->>'doublecrazyfiled')<>'gotyou')
你可以看到相同的MYTABLE
被使用了3次。问题是,我必须对不同的表运行相同的查询,即替换了MYTABLE。
所以我试着去寻找-如果有可能的话-
SET TABLENAME=CUS_DELTA --//then use the above like -
select * from $TABLENAME;
我正在使用postgres 13. 5和DBeaver来运行查询。如果不是SQL,DBeaver提供任何这样的方法吗?
如果SQL不能支持它,我可以使用动态SQL/PL SQL(虽然我不知道这些)-如果它不会太复杂的上述情况。但我不知道的代码,所以请求通过一个答案分享相同的。
1条答案
按热度按时间vd8tlhqk1#
仔细阅读this文章中关于动态SQL的内容。
基本上,这样你就可以简单地传递值。现在,你的值也是动态的,但是不用担心。声明你的表名为
varchar
和SELECT tbname INTO yourvariable FROM sometable
。然后你可以把这个变量传递给你的动态查询。编辑:
极简主义示例:
然后让我们像这样使用
TABLENAME
变量:以上内容未经测试。