
# 业务报错：UNION types %s and %s cannot be matched
#### 问题现象
执行union语句时报错：UNION types %s and %s cannot be matched。
#### 原因分析
该报错的原因是UNION的分支中，相同位置的输出列格式类型不同导致。
#### 处理方法
**故障构造场景**
1. 使用客户端连接DWS数据库。
2. 执行以下SQL语句。 
   ```
   CREATE TABLE t1(a int, b timestamp);
   CREATE TABLE
   CREATE TABLE t2(a int, b text);
   CREATE TABLE
   INSERT INTO t1 select 1, current_date;
   INSERT 0 1
   INSERT INTO t2 select 1, current_date;
   INSERT 0 1
   SELECT * FROM t1 UNION SELECT * FROM t2;
   ERROR:  UNION types timestamp without time zone and text cannot be matched
   LINE 1: SELECT * FROM t1 UNION SELECT * FROM t2;
                                         ^
   ```
   
   
**解决办法**
1. 示例中，t1表和t2表在b列上类型不同，导致在UNION操作时出现类型不匹配的报错，应保证UNION各分支相同位置的输出列类型匹配。 
   ![](https://support.huaweicloud.com/trouble-dws/public_sys-resources/note_3.0-zh-cn.png)
   t2表b列是text类型，插入的数据是current_date，在插入时发生了隐式类型转换，所以插入不报错；但是在查询时，不会自动进行隐式转换，因此会报错。
   解决以上问题，需保证UNION各分支的输出列类型匹配，不满足要求时可以对输出列强制类型转化。
   ```
   SELECT a,b::text FROM t1 UNION SELECT a,b FROM t2;
    a |          b          
   ---+---------------------
    1 | 2023-02-16
    1 | 2023-02-16 00:00:00
   (2 rows)
   ```
   
   
 
