Snowflake多连接SQL遇语法错误:unexpected 'on' 求解决方案
解决Snowflake SQL编译错误:syntax error unexpected 'on'
错误分析
你遇到的SQL compilation error: syntax error line 6 at position 75 unexpected 'on'通常由SQL语法格式问题或逻辑冲突引发,结合你的代码,核心排查方向如下:
1. 隐式逻辑冲突引发的解析偏移
你用LEFT JOIN关联rtncall和dlexp表,但在WHERE子句中直接过滤这两个表的非空字段:
rtncall.RETURNED_CALL_STATUS_CODE = 'CONTACTED'dlexp.CURRENT_RECORD_IND = 'Y'
这会强制将LEFT JOIN转为INNER JOIN,虽属于逻辑问题,但部分场景下会导致解析器误判语法位置,引发错误提示偏移。
2. 不可见特殊字符或格式异常
错误指向ON关键字,大概率是ON之前的内容存在解析障碍:
- 检查
rtncall别名与ON之间是否有全角空格、制表符等不可见字符 - 确认表名、别名拼写无多余符号或错误
修正后的SQL代码
SELECT clmt.CLAIMANT_NATURAL_KEY, dlexp.LOSS_EXPOSURE_NATURAL_KEY, MIN(rtncall.RETURNED_CALL_DATE_TIME_KEY) MIN_RETURN_CALL_DATE_TIME_KEY FROM PNC_PSA_DB.KEDW_KSG_LOSS_CDC.D_CLAIMANT clmt LEFT JOIN PNC_PSA_DB.KEDW_KSG_LOSS_CDC.D_CLAIM_CONTACT_RETURN_CALL rtncall ON clmt.CLAIM_CONTACT_KEY = rtncall.CLAIM_CONTACT_KEY AND rtncall.RETURNED_CALL_STATUS_CODE = 'CONTACTED' LEFT JOIN PNC_PSA_DB.KEDW_KSG_LOSS_CDC.D_LOSS_EXPOSURE dlexp ON clmt.CLAIMANT_NATURAL_KEY = dlexp.CLAIMANT_NATURAL_KEY AND dlexp.CURRENT_RECORD_IND = 'Y' GROUP BY clmt.CLAIMANT_NATURAL_KEY, dlexp.LOSS_EXPOSURE_NATURAL_KEY
额外排查步骤
- 将SQL复制到纯文本编辑器(如Notepad++),开启显示所有字符功能,排查全角空格、异常换行符等问题
- 逐行核对表名、字段名,确保与Snowflake中实际对象一致
- 简化SQL,先保留
FROM和第一个LEFT JOIN验证编译,逐步添加其他部分定位问题
内容的提问来源于stack exchange,提问作者Michelle Luana
相关产品推荐
相关产品推荐

