【问题标题】:SQL DB2 Queries Syntax IssueSQL DB2 查询语法问题
【发布时间】:2015-04-13 02:17:49
【问题描述】:

我目前有一个表,我想用 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 

【问题讨论】:

  • 为什么每行末尾都有 \?这绝对是无效的(标准)SQL。

标签: sql select db2


【解决方案1】:

您的第一个子查询没有从表 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_SUPRD_E_EMP 选择该类型,它会执行此操作,这可能是第二个子查询中该列的类型的结果。要解决这个问题,您应该通过一个或两个选择列表中的显式类型转换来确保子查询选择的相应列的数据类型相同。

【讨论】:

  • 是否可以在 SQL db2 中打印一个被视为空行的新行?
  • 另外,有没有办法让表格打印'null'而不是'-'?这就是为什么我尝试使用引发错误的“null”
  • @GeForce - printing 'null' 将是一个格式/显示问题,并不真正属于数据库(而是在您的报告应用程序中) - 为此重要的是,这是一个技术/计算机术语,您最好选择您的用户/客户/客户对该领域的期望(例如'N/A')。
  • @geforce ...print a new line in SQL... SQL 不会“打印”。打印不是数据库功能。但是,任何数量的 SQL 客户端和管理产品都包含“报告编写器”功能,可以提供一些打印支持。为了回答,您需要告诉我们您正在使用什么。 DB2 在什么平台上运行?它是什么版本?你用的是什么客户端?
猜你喜欢
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多