Teradata执行SQL报3706错误:field_name与AS关键字间存在语法错误
3706: Syntax error: expected something between 'field_name ' and the 'AS' keyword
问题修复方案
错误点说明
- 别名定义位置错误:Teradata不支持直接在多表JOIN语句末尾加
AS 别名的方式给整个关联结果集命名,SQL Server(SSMS)语法宽容度更高可兼容该写法,要在子查询中引用外层的关联结果,需要把外层的查询逻辑套入子查询括号后再定义别名P1。 - 无效字符:
WHERE关键字前多出的-属于无效语法字符,需要删除。 - 字段名拼写不统一:关联条件中的
RDC_NUM、WEEK_NUM和实际查询的RDC_NBR、WEEK_NBR拼写不一致,需要修正统一,否则就算语法校验通过也会报字段不存在错误。 - 未指定字段来源:原查询中
UPC_NUM、MODEL_NUM等字段没有指定所属表,在Teradata多表关联场景下会触发字段歧义报错。
修正后的SQL代码
SELECT P1.PO_NBR, P1.PO_DATE, P1.PO_LINE_NBR, P1.RDC_NBR, P1.UPDATE_USERID, P1.UPC_NUM, P1.MODEL_NUM, P1.ITEM_DESCRIPTION, P1.WEEK_NBR FROM ( SELECT T.PO_NBR, T.PO_DATE, T.PO_LINE_NBR, T.RDC_NBR, T.UPDATE_USERID, O.UPC_NUM, O.MODEL_NUM, O.ITEM_DESCRIPTION, Y.WEEK_NBR FROM MF_PRD_VIEWS.PLAT_PO_LN_ALLOC T JOIN MF_PRD_VIEWS.POLT_PO_LINE O ON T.PO_NBR = O.PO_NBR AND T.PO_DATE = O.PO_DATE AND T.RDC_NBR = O.RDC_NBR JOIN MF_PRD_VIEWS.FSYT_FISCAL_YEAR Y ON T.PO_DATE = Y.DATE_IN_YEAR WHERE T.PO_date >= '2021-01-01' ) AS P1 WHERE ( SELECT COUNT(UPC_NUM) AS EXPR1 FROM MF_PRD_VIEWS.POLT_PO_LINE AS P2 WHERE P1.RDC_NBR = P2.RDC_NBR AND P1.WEEK_NBR = P2.WEEK_NBR AND P1.UPC_NUM = P2.UPC_NUM ) > 1
内容的提问来源于stack exchange,提问作者user2220670
相关产品推荐
相关产品推荐

