UNION查询中的列不匹配

时间:2018-11-12 10:24:19

标签: sql db2 union

我在表1中有A,B列,在表2中有B,C列。需要在它们之间进行合并。 例如:从表1 UNION中选择A,B从表2中选择0,B。

我不需要这个零来解决列不匹配问题,而是还有其他解决方法吗?

我通过提供简单的示例来提问。但是在我的情况下,表结构很大并且查询已经建立。现在我需要通过替换为零来修复此联合查询。(由于DB2升级)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

SQL结果集中返回的列只能具有一种数据类型。 并集或并集所有都将导致第一个查询的行和第二个查询的行的结果(如果合并,则将其删除重复数据)。 因此,第一个查询的第一列需要匹配第二个查询的第一列的数据类型。

您可以通过运行describe来进行检查:

describe select a,b from t1

如果您在GUI(JDBC连接)中工作,也可以使用

call admin_cmd('describe select a,b from t1')

因此,如果some列不匹配,则必须显式转换数据类型。

答案 1 :(得分:0)

要使联盟中的两条支腿A和B与联盟兼容,则要求:

a) A and B have the same number of columns
b) The types for each column in A is compatible with the corresponding column in B

在查询中,可以使用每种类型的空值:

 select a, b from T1 
 UNION 
 select null, b from T2 

在某些情况下,您可能必须将null显式地转换为与A相同的类型(在这种情况下可能不是):

 select a, b from Table 1 
 UNION 
 select cast(null as ...), b from Table 2