首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

DB2 中union 查询碰见的空值有关问题,求大神解答一二

2013-07-08 
DB2 中union 查询碰见的空值问题,求大神解答一二INSERT INTO TEMP_3 (ID, NAME)SELECT T.ID, T.NAME---ID

DB2 中union 查询碰见的空值问题,求大神解答一二
INSERT INTO TEMP_3 (ID, NAME)
  SELECT T.ID, T.NAME---ID 为varchar类型
    FROM 
  (
  SELECT ID, NAME FROM TEMP_1---ID 为varchar类型
  UNION
  SELECT  NULL ID, NAME FROM TEMP_2
   ) T
----
在以上的union 脚本中,运行报错,然后我把脚本改为
INSERT INTO TEMP_3 (ID, NAME)
  SELECT T.ID, T.NAME
    FROM 
  (
  SELECT ID, NAME FROM TEMP_1
  UNION
  SELECT  '' AS ID, NAME FROM TEMP_2--NULL 改为''
   ) T
就可以执行插入脚本。

问题1:在DB2中 union脚本如果碰见以上这种情况,是否只能用''替换NULL ?
----------------
在改为''后 我union 脚本可以运行了,但是碰见一个问题,如果 我插入的目标表 temp_3 中 ID 这个字段的字段类型是 DECIMAL(4, 0),那么 我必须把脚本改为这样,把id 字段做类型转换
INSERT INTO TEMP_3 (ID, NAME)
  SELECT CAST(T.ID AS DECIMAL (4,0)), T.NAME---temp_3 ID 为DECIMAL类型
    FROM 
  (
  SELECT ID, NAME FROM TEMP_1---ID 为VARCHAR类型
  UNION
  SELECT  '' ID, NAME FROM TEMP_2
   ) T
-----
这个脚本运行报错,原因是 在查询结果中  ID 字段中存在 '' 这个值,无法做转换,如果 我把脚本换成
INSERT INTO TEMP_3 (ID, NAME)
  SELECT CAST(T.ID AS DECIMAL (4,0)), T.NAME---temp_3 ID 为DECIMAL类型
    FROM 
  (
  SELECT ID, NAME FROM TEMP_1---ID 为VARCHAR类型
  UNION
  SELECT  '0' ID, NAME FROM TEMP_2
   ) T
 ---即把原来的''默认为'0',这样就可以通过执行。
问题2 :是否 ''只能给他附上一个默认值,比如0 才可以执行DECIMAL  的转换?

有没有其他办法,因为有时候并不能想当然的写一个默认值,因为选择的默认值0可能在该字段中已经被赋予了其他的意义。

以上2个问题 是一并的。刚开始学DB2的sql。很多不会,有劳各位了。 DB2 脚本
[解决办法]
提示什么
id是否是主键

热点排行