是什么原因导致我的第二个SQL查询返回的数量少于预期?我有一个包含1000个条目的地址表,在筛选“纽约”城市和“Mainstreet”街道时,我的第一个查询返回100。第二个查询应返回900,但实际上没有。以下是我的查询:
select count(*)
from address_data
where city = 'New York' and street = 'Mainstreet'
select count(*)
from address_data
where not (city = 'New York' and street = 'Mainstreet')
3条答案
按热度按时间2g32fytz1#
cyvaqqii2#
来自文档:
条件指定一个或多个表达式和逻辑(布尔)运算符的组合,并返回值
TRUE
、FALSE
或UNKNOWN
。在关于
NULL
s的部分中,您可以找到以下说明:要测试空值,请仅使用比较条件
IS NULL
和IS NOT NULL
。如果将任何其他条件与空值一起使用,并且结果取决于空值,则结果为UNKNOWN
。因为空值表示缺少数据,所以空值不能等于或不等于任何值或其他空值。但是,在计算DECODE
函数时,Oracle认为两个空值相等。只要
where
子句只返回condition计算结果为TRUE
的行(因此它拒绝FALSE
和UNKNOWN
),NOT (<condition>)
就不会为您提供具有UNKNOWN
条件值的行。考虑以下示例数据:
您可以使用
LNNVL
函数来捕获所有非TRUE
的内容:或者使用纯集方法并使用
EXCEPT
(Oracle pre-19c中为MINUS
)集运算符计算集补:在这两种情况下,您将得到相同的结果:
| 颜色|
| - ------|
| 假|
| * 无效 *|
fiddle
olqngx593#
我认为城市和街道列中的空值在你的第二个查询中没有被识别出来,所以你可以尝试一下下面的第二个查询;参见: