我目前有一个表,我想用select语句修改。
我想选择一个空行并将其与另一个表合并,这可以在下面的代码中看到。
第一个select语句是错误的,因为它只需要为一行而不是所有这些语句执行此操作。或者以某种方式添加一个空行而不必向表中添加值
下面的代码也会抛出此错误:
SQL0420N在字符串参数中找到无效字符 功能“DECFLOAT”。 SQLSTATE = 22018
代码:
select ' ' as RD_E_SUP, \
' ' as RD_E_EMP, \
' ' as RD_QUOT \
from RD_SUPERVISOR \
\
UNION \
\
select RD_E_SUP, \
RD_E_EMP, \
'null' as RD_QUOT \
from RD_SUPERVISOR \
ORDER BY RD_E_EMP
答案 0 :(得分:2)
您的第一个子查询未从表RD_SUPERVISOR
中绘制任何内容,因此从该表中选择的唯一原因是 是否需要为表的每一行提供一个结果。假设您只需要一行而不管表RD_SUPERVISOR
的内容,那么您可以选择一个特殊的表来实现此目的:
select ' ' as RD_E_SUP,
' ' as RD_E_EMP,
' ' as RD_QUOT
from SYSIBM.SYSDUMMY1
在其他一些DBMS中,您可以通过选择“DUAL”或完全省略FROM
子句来达到相同的效果。
鉴于第一个子查询生成的行不能复制第二个子查询生成的行,UNION ALL
将是比UNION
更好的选择。如果要从第二个子查询的结果中删除重复项,则应在该子查询中使用SELECT DISTINCT
。
另请注意,' '
和'null'
都与NULL
不同。这不一定是个问题,但如果您的想法不同,那么您的查询并不意味着您的意思。
SQL0420N错误可能意味着DB2正在尝试(并且失败)将一个空字符串(' '
)转换为类型DECFLOAT
。如果它为整个结果的列RD_E_SUP
或RD_E_EMP
选择了该类型,则可能会这样做,这可能是因为它是第二个子查询中该列的类型。要解决这个问题,您应该确保通过一个或两个选择列表中的显式类型转换,子查询选择的相应列的数据类型是相同的。