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_SUP
或 RD_E_EMP
列选择了该类型,它就会这样做,这可能是因为它是第二个子查询中该列的类型。要解决此问题,您应该通过一个或两个 select 列表中的显式类型转换来确保子查询 select 编辑的相应列的数据类型相同。
我目前有一个 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_SUP
或 RD_E_EMP
列选择了该类型,它就会这样做,这可能是因为它是第二个子查询中该列的类型。要解决此问题,您应该通过一个或两个 select 列表中的显式类型转换来确保子查询 select 编辑的相应列的数据类型相同。