当前位置: 首页 > 面试题库 >

如何在Oracle中的NOT IN和NOT LIKE语句中处理空值?

符鸿光
2023-03-14
问题内容

我有很长的PL / SQL,除了where子句的一小部分之外,它都能正常工作。

我期望应该返回一行,但是由于where子句检查的字段为null,因此即使满足条件也不会返回该行。

我在这里阅读了一个很好的笔记:http :
//jonathanlewis.wordpress.com/2007/02/25/not-
in/

它解释了空值如何影响NOT IN语句,并且我认为对于NOT LIKE同样如此。

我一直找不到的是我需要的可比替代品。我是否需要以某种方式将其切换为IN和LIKE或提供某些内容以在NUll情况下返回该行?

这是我的代码的简化版本。

SELECT * FROM Temp_Table T
WHERE -- Other where constraints
AND (T.Col_One NOT LIKE 'AString'
     OR T.Col_Two NOT IN ('BString','CString'))

在我的情况下,该行在Col_One和Col_Two中都将为空。

任何帮助是极大的赞赏。

谢谢。


问题答案:

试试这个:

AND (NVL(T.Col_One,'NuLl') NOT LIKE 'AString'
      OR NVL(T.Col_Two,'NuLl') NOT IN ('BString','CString'))


 类似资料:
  • 问题内容: 我知道使用准备好的语句有助于避免sql- injection。我的问题是,准备好的语句通常是非常静态的。我有一个问题,我在哪里在运行时根据用户输入建立sql查询的子句。根据填充的输入字段,我必须将相应的语句添加到where子句中。如何通过准备好的语句实现这一目标? 问题答案: 我猜您可以根据要查询的列来动态构建准备好的语句,即使用StringBuffer和循环根据所需的列来构建它们。

  • 问题内容: 我到处都在寻找解释,以了解选择语句中的子查询如何工作,但由于解释非常模糊,我仍然无法理解该概念。 我想知道您如何在oracle的select语句中使用子查询以及它的确切输出。 例如,如果我有一个查询,希望显示这些表中员工的姓名及其管理的个人资料数量 员工(EmpName,EmpId) Profile(ProfileId,…,EmpId) 如何使用子查询? 我当时想在select语句中需

  • 问题内容: 在C语言中非常常见:像这样入侵“空if语句”: 它在Python中工作吗?我的意思是,我们可以通过使用它来提高应用程序的性能吗?我也想知道为什么。 问题答案: 如果“ if”中没有其他情况,则性能会得到改善,因为字节码不会将执行传递给“ if”情况。 这是一些功能和输出 以下示例应用程序: 分解为: 以下 分解为:

  • 问题内容: 我有一个包含3列的表格:c1,c2和c3。我想编写一条select语句,以便如果c1和c2都为空,则显示c3,否则显示c1。 在上述情况下,编写select语句的最佳方法是什么? 问题答案: 使用案例 使用NVL2 或者 使用解码 易读性和易用性CASE胜出。

  • 问题内容: 如何在具有varchar数据类型且单引号的列中插入记录? 示例 :名字是,姓氏是 问题答案: 使用两个单引号 或者,使用新的(10g +)报价方法 :

  • 问题内容: 想象一下,我有一个简单的表: 如果我在没有提交的情况下将记录插入到Table1中… Oracle怎么知道下一条INSERT语句违反了PK约束,因为尚未将任何内容提交给数据库。 Oracle在哪里/如何管理事务,以便它甚至在尚未提交事务时就知道我违反了约束。 问题答案: Oracle创建一个索引以强制执行主键约束(默认情况下为唯一索引)。当会话A插入第一行时,索引结构将更新,但不会提交更