从Oracle迁移至PostgreSQL时SQL语句语法错误求助
Oracle转PostgreSQL SQL错误修复
你的SQL存在语法和逻辑问题,导致PostgreSQL抛出语法错误,以下是问题点和修正方案:
问题分析
- FROM子句语法错误:
from NG_PAYMENT_OUTPUT NPO,末尾多了逗号,且查询中引用的NIBL、NRQ表未在FROM子句中声明,数据库无法识别这些表 - GROUP BY规则违反:PostgreSQL要求SELECT中的非聚合列必须全部出现在GROUP BY子句中,原语句SELECT的
payee_id、account_profile_id等列未包含在GROUP BY里 - 冗余符号:语句末尾的反引号是多余的
修正后的SQL
SELECT NPO.VIN, CAST(NPO.program_number AS NUMERIC) AS programme_id, payee_id, account_profile_id, earning_dealer, earning_customer FROM NG_PAYMENT_OUTPUT NPO JOIN NIBL ON NPO.program_number = CAST(NIBL.member_id AS VARCHAR) JOIN NRQ ON NRQ.VIN = NPO.VIN WHERE NOT EXISTS ( SELECT 1 FROM NG_FREEZE_PROG_DETAILS NFPD WHERE NPO.VIN = NFPD.VIN AND CAST(NIBL.member_id AS VARCHAR) = NFPD.FREEZE_PROGRAMME_ID ) GROUP BY NPO.VIN, NPO.program_number, payee_id, account_profile_id, earning_dealer, earning_customer;
关键修改说明
- 移除FROM子句末尾的逗号,显式用JOIN语句关联NIBL、NRQ表(替代Oracle的隐式连接写法,PostgreSQL推荐显式JOIN)
- 将所有SELECT中的非聚合列添加到GROUP BY子句中
- 用
CAST(column AS TYPE)替代column::type(两种写法都支持,但CAST更具可读性) - 移除语句末尾的多余反引号
内容的提问来源于stack exchange,提问作者parrpt
相关产品推荐
相关产品推荐

