从Oracle迁移至PostgreSQL时,子查询别名报错问题咨询
PostgreSQL子查询别名问题解答
1. 别名应该加在什么位置?
直接在外层FROM后面的子查询右括号后添加别名(AS关键字可选,加上可读性更强)。修正后的代码如下:
"SELECT DISTINCT(CODE) FROM (" + "SELECT TRIM(BOTH ' ' FROM PROJECT_NUMBER) CODE FROM SCHEMA.TABLE_NAME " + "WHERE PROJECT_NUMBER IS NOT NULL " + "AND LAST_UPDATE_DATE >= :lastUpdateDate " + "UNION " + "SELECT TRIM(BOTH ' ' FROM ANOTHER_CODE) CODE FROM SCHEMA.TABLE_NAME " + "WHERE ANOTHER_CODE IS NOT NULL " + "AND LAST_UPDATE_DATE >= :lastUpdateDate " + ") AS t " + // 此处添加别名,t可替换为任意合法名称 "WHERE CODE IS NOT NULL";
2. 是否所有子查询都需要别名?
不是。只有当子查询作为**FROM子句的数据源**(即被当作临时表来查询)时,PostgreSQL才强制要求加别名。其他场景的子查询(比如SELECT列表中的子查询、WHERE子句中的关联子查询等)无需别名。
3. 本查询中是否需要使用别名?
必须添加。你的外层查询是从UNION组合的子查询结果中筛选数据,这个子查询属于FROM子句的数据源,PostgreSQL对此类子查询有强制别名要求——而Oracle无此约束,这就是迁移时报错的核心原因。
内容的提问来源于stack exchange,提问作者Euridice01
相关产品推荐
相关产品推荐

