Teradata SQL查询语法错误:part_addr_ref与NOT之间缺少关键字
问题分析与修正
语法错误原因
- WHERE子句中不能直接为表达式定义别名:你在WHERE里给
CONCAT结果加as part_addr_ref和as part_addr_before是错误的,别名仅能在SELECT或HAVING子句中使用,WHERE中需直接使用表达式,或通过子查询/CTE提前定义别名。 - 不等于运算符写法错误:Teradata中不等于的正确运算符是
<>或!=,而非NOT=。
修正后的查询语句
如果需求是筛选出两张表关联后地址拼接结果不同的行,可修改为:
select rg.col_tar, count(distinct rg.col_tar) from ref_table1 rg full outer join ref_table_2 ad ON rg.table_prime = ad.table_prime where CONCAT(rg.col1, rg.col2, rg.col3, rg.col4) <> CONCAT(ad.col1, ad.col2, ad.col3, ad.col4)
注意事项
- 使用
FULL OUTER JOIN后加WHERE条件会过滤掉其中一张表无匹配时的NULL行(比如rg有数据ad无,或反之的情况)。如果需要保留所有关联行并仅标记地址不同的记录,建议改用CASE在SELECT中判断:
-- 保留所有FULL JOIN行,同时标记地址是否不同 select rg.col_tar, count(distinct rg.col_tar), case when CONCAT(rg.col1, rg.col2, rg.col3, rg.col4) <> CONCAT(ad.col1, ad.col2, ad.col3, ad.col4) then '地址不同' else '地址相同' end as addr_compare_result from ref_table1 rg full outer join ref_table_2 ad ON rg.table_prime = ad.table_prime
内容的提问来源于stack exchange,提问作者fsssaiyan
相关产品推荐
相关产品推荐

