【问题标题】:Incorrect no. of rows fetched in SQL编号不正确。在 SQL 中获取的行数
【发布时间】:2014-11-25 16:26:59
【问题描述】:

请考虑一个名为 Employee 的表,它包含以下两列:

  1. EmpId - 编号 (12)
  2. EmpType - Varchar2(2 字节)

EmpType 有两个有效值 ES 或 NULL。

当我在查询下方触发时,我得到 100 行

select * from Employee;

下面的查询给了我 60 行:

select * from Employee where EmpType = 'ES'

select * from Employee where EmpType <> 'ES' 给了我 0 行。

为什么会这样?我应该得到 40 行,其中 EmpType 不是 ES。

我正在开发 Oracle Sql DB。

【问题讨论】:

  • 尝试使用select * from Employee where EmpType is null 获取空值emptypeselect * from Employee where EmpType is not null 获取emptype= ES

标签: sql database oracle


【解决方案1】:

Null 不等于任何东西,甚至不等于另一个 null。所以说不等于ES,null就是not不等于ES。如果你明白我的意思。

所以要获得你想要的值,你需要is null

select * from Employee where EmpType is null

handling null values查看这篇文章

编辑:正如@Allan 所指出的,在 Oracle 中,空字符串等同于 null。

【讨论】:

  • 在Oracle中,空字符串等价于null,所以最后一条SQL语句不起作用。
【解决方案2】:

与数字一起使用的“”不与nvarchar一起使用

所以你应该改用:

select * from Employee where EmpType + '' like 'null'

select * from Employee where EmpType is null

【讨论】:

  • """ 用于数字而不是 nvarchar" 是完全错误的。不等于运算符 <> 可以很好地用于 varchar 列。另一边的运算符+ 用于SQL 中的数字(要连接字符串,您必须在标准和Oracle 中使用||)。而表达式EmpType + '' like 'null' 根本不起作用
猜你喜欢
  • 2017-01-23
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2016-07-14
相关资源
最近更新 更多