首页 > 解决方案 > 通过 Oracle 命令参数在 where 子句中传递 null

问题描述

使用以下 Oracle 查询通过 oracle 命令参数获取数据。

从 tbl_name 中选择 count(*) 其中 col_name = :col_name

如果我将 :col_name 值作为“某个值”传递,它的工作并返回一些计数。如果 :col_name 为空,则它不起作用。因为在 where 子句 col_name = null 是不正确的。相反,我们需要使用 col_name 为 null。

如何从 c# 实现这一点,基于 col_name 值我需要使用正确的查询。

col_name = 'some value' :从 tbl_name 中选择 count( ) col_name = :col_name col_name = null :从 tbl_name 中选择 count( ) 其中 col_name 为 null

如何在一个查询中实现这一点。如果 col_name 为 null,则需要使用第二个 where 子句查询,否则需要使用第一个 where 子句查询。

提前致谢

标签: c#oracleoracle-sqldeveloperwhere-clause

解决方案


必须在查询中使用IS NULLorIS NOT NULL来选择或排除 NULL 值:

Select count(*) from tbl_name where col_name IS NULL

SQL、语言和所有使用它的数据库都使用三值逻辑。任何布尔表达式都返回 True、False 和 NULL。与编程语言不同,NULL它不是一个特定的值。NULL表示该值为 UNKNOWN。也许是因为它丢失了,或者因为没有有意义的价值可以存储。

如果将一个 UNKNOWN 值与另一个值进行比较,则结果只能是 UNKNOWN。因此,如果一个值为 NULL,则结果也是 NULL。如果name为 null,则两者都name = NULLname != NULL返回 NULL,从不返回TrueFalse

在过滤(即 WHERE、HAVING)和 JOIN 中,NULL 被视为False,因此您的查询将永远不会匹配NULL值。毕竟,您询问了与特定条件匹配的所有行,而其中一些行的答案是I don't know if this matches or not. 这些是否应该包含在结果中?I don't know. 该语言无法猜测,因此它要求程序员明确说明是否应包含未知结果


推荐阅读