SQL DB2 查询语法问题

SQL DB2 Queries Syntax Issue

我目前有一个 table,我想用 select 语句修改它。

我想 select 一个空行并将其与另一个 table 合并,可以在下面的代码中看到。

第一个 select 语句是错误的,因为它只需要对一行而不是所有行执行此操作。或者以某种方式添加一个空行而不必向 table

添加值

下面的代码也会引发此错误:

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 

你的第一个子查询没有从 table RD_SUPERVISOR 中提取任何东西,所以从 table 到 select 的唯一原因是你 是否希望 table 的每一行都有一个结果。考虑到无论 table RD_SUPERVISOR 的内容如何,​​您只需要一行,有一个特殊的 table 您可以 select 出于这个目的:

select ' ' as RD_E_SUP,
   ' ' as RD_E_EMP,
   ' ' as RD_QUOT
from SYSIBM.SYSDUMMY1

在其他一些 DBMS 中,您可以通过 selecting 从 "DUAL" 或完全省略 FROM 子句来实现相同的效果。

鉴于第一个子查询生成的行不能重复第二个子查询生成的任何行,UNION ALL 将是比 UNION 更好的选择。如果您想从第二个子查询的结果中删除重复项,那么您应该在该子查询中使用 SELECT DISTINCT

还要注意,' ''null' 都与 NULL 不同。这不一定是个问题,但如果您的想法不同,那么您的查询并不代表您认为的意思。

SQL0420N 错误可能意味着 DB2 正在尝试(但失败了)将您的空白字符串之一 (' ') 转换为类型 DECFLOAT。如果它为总体结果的 RD_E_SUPRD_E_EMP 列选择了该类型,它就会这样做,这可能是因为它是第二个子查询中该列的类型。要解决此问题,您应该通过一个或两个 select 列表中的显式类型转换来确保子查询 select 编辑的相应列的数据类型相同。