NOT IN 子句中的 NULL 值

2023-07-18数据库问题
1

本文介绍了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 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

按天分组的 SQL 查询
SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

在 Group By 查询中包含缺失的月份
Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12