Postgres中如何复用大型连接语句实现多不同行查询?
PostgreSQL 避免重复大型连接语句的解决方案
你可以用以下几种方法避免重复编写大型连接语句:
方法1:使用CTE(公共表表达式)
这是最简洁直观的方式,通过WITH子句将大型连接逻辑定义为一个临时结果集,后续的SELECT语句直接引用即可:
WITH massive_join AS ( -- 这里放你的大型连接语句 <MASSIVE JOIN STATEMENT> ) SELECT <statement> FROM massive_join UNION ALL SELECT <different statement> FROM massive_join;
CTE的作用范围是整个查询块,两个SELECT都能正常访问massive_join这个临时结果集。
方法2:创建临时表
如果这个大型连接的结果需要在多个查询中复用,或者数据量较大,适合用临时表存储连接结果:
-- 创建临时表并插入连接结果 CREATE TEMP TABLE massive_join AS <MASSIVE JOIN STATEMENT>; -- 执行查询 SELECT <statement> FROM massive_join UNION ALL SELECT <different statement> FROM massive_join; -- 临时表会在会话结束后自动删除,也可以手动清理 DROP TABLE IF EXISTS massive_join;
为什么你之前的尝试失败
你之前给子查询设置别名后无法在第二个SELECT中引用,是因为子查询的别名仅在当前SELECT语句的范围内有效,第二个SELECT属于独立的查询块,无法访问第一个子查询的别名,所以PostgreSQL会提示“关系不存在”。
内容的提问来源于stack exchange,提问作者H. Haller
相关产品推荐
相关产品推荐

