NOT IN 子句中的 NULL 值

NULL values inside NOT IN clause(NOT IN 子句中的 NULL 值)
本文介绍了NOT IN 子句中的 NULL 值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我得到不同的记录计数时出现了这个问题,我认为是相同的查询,一个使用 not in where 约束,另一个使用 left join.not in 约束中的表有一个空值(坏数据),这导致该查询返回 0 条记录.我有点理解为什么,但我可以借助一些帮助来完全掌握这个概念.

This issue came up when I got different records counts for what I thought were identical queries one using a not in where constraint and the other a left join. The table in the not in constraint had one null value (bad data) which caused that query to return a count of 0 records. I sort of understand why but I could use some help fully grasping the concept.

简单地说,为什么查询 A 返回结果而 B 没有?

To state it simply, why does query A return a result but B doesn't?

A: select 'true' where 3 in (1, 2, 3, null)
B: select 'true' where 3 not in (1, 2, null)

这是在 SQL Server 2005 上.我还发现调用 set ansi_nulls off 会导致 B 返回结果.

This was on SQL Server 2005. I also found that calling set ansi_nulls off causes B to return a result.

推荐答案

Query A 同:

select 'true' where 3 = 1 or 3 = 2 or 3 = 3 or 3 = null

因为 3 = 3 为真,所以你得到了结果.

Since 3 = 3 is true, you get a result.

查询 B 与以下内容相同:

Query B is the same as:

select 'true' where 3 <> 1 and 3 <> 2 and 3 <> null

ansi_nulls 开启时,3 <>null 是 UNKNOWN,因此谓词的计算结果为 UNKNOWN,并且您不会得到任何行.

When ansi_nulls is on, 3 <> null is UNKNOWN, so the predicate evaluates to UNKNOWN, and you don't get any rows.

ansi_nulls 关闭时,3 <>null 为真,因此谓词的计算结果为真,并且您得到一行.

When ansi_nulls is off, 3 <> null is true, so the predicate evaluates to true, and you get a row.

这篇关于NOT IN 子句中的 NULL 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)