【问题标题】:Column Mismatch in UNION queriesUNION 查询中的列不匹配
【发布时间】:2018-11-12 10:24:18
【问题描述】:

我有表 1 中的 A、B 列和表 2 中的 B、C 列。需要在它们之间执行联合。 例如:select A,B from Table 1 UNION select 0,B from Table 2.

我不需要这个零来解决列不匹配问题。相反,还有其他解决方案吗?

我通过提供简单的例子来问这个问题。但在我的情况下,表结构非常大,查询已经构建。现在我需要通过替换这个零来修复这个联合查询。(由于 DB2 升级)

谁能帮忙?

【问题讨论】:

  • 不完全了解您想要实现的目标。 UNION 需要相同数量的列。所以你必须提供一些虚拟值。其他默认值呢?
  • 就此而言,列至少也必须是可转换的。如果A 是DATE,而您只提供0,则转换将失败。

标签: sql db2 union


【解决方案1】:

为了使联合中的两条腿 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

在您的查询中,您可以使用 null ,它是每种类型的一部分:

 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 

【讨论】:

    【解决方案2】:

    SQL 结果集中返回的列只能具有一种数据类型。 union 或 union all 会产生第一个查询的行和第二个查询的行(在联合的情况下,它们会被重复数据删除)。 所以第一个查询的第一列需要匹配第二个查询的第一列的数据类型。

    您可以通过运行描述来检查:

    describe select a,b from t1
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多