Teradata中UNION ALL语句顺序引发SUB_TYPE值异常问题求助
Teradata UNION ALL 字段值异常问题原因
这是Teradata处理UNION ALL时的类型推断规则导致的:
- Teradata会以
UNION ALL中第一个SELECT语句的对应字段数据类型,作为整个结果集的字段定义。 - 在你第一次执行的SQL里,第一个查询用
'' AS SUB_TYPE,Teradata会将这个字段推断为CHAR(0)类型(仅能存储空字符串的特殊字符类型)。当后续TABLE_B的SUB_TYPE非空值被强制转换为CHAR(0)时,所有非空内容都会被截断为空,只有null值可以正常保留。 - 调换查询顺序后,第一个查询的SUB_TYPE使用TABLE_B的原始字段类型(比如
VARCHAR(n)或CHAR(m)),结果集的字段类型随之匹配这个原始类型。此时第二个查询的''会被转换为对应类型的空字符串,不会对TABLE_B的正常取值造成截断或转换异常,因此结果显示正常。
解决办法
显式指定第一个查询中SUB_TYPE的类型,与TABLE_B的SUB_TYPE保持一致:
SELECT ID, TYPE, CAST('' AS VARCHAR(XX)) AS SUB_TYPE -- 将XX替换为TABLE_B中SUB_TYPE的实际长度 FROM Table_A UNION ALL SELECT ID, TYPE, SUB_TYPE FROM TABLE_B
内容的提问来源于stack exchange,提问作者Billie_H
相关产品推荐
相关产品推荐

