我无法测试null = null
,因为我没有权限在我使用的数据库上创建数据。
我的问题是:
如果我有一个包含两行的表:
Row 1: ItemID = 1, CollectionID = 1, Price = null
Row 2: ItemID = 2, CollectionID = 1, Price = null
我的查询如下:
SELECT CollectionID
FROM my_table TB
WHERE Price >= (SELECT avg(Price)
FROM my_table
WHERE TB.CollectionID = CollectionID);
结果中会显示collectionID 1
吗?
换句话说,我们为TB.CollectionID
和CollectionID
提供了 null 值。
TB.CollectionID = CollectionID
?
答案 0 :(得分:9)
不,NULL
等于没有其他值,包括NULL
的另一个实例(一般来说这适用于SQL,而不仅仅是Oracle (a))。
那是因为NULL
不是一个值,而是一个实体,意思是“未知”,“不可用”或“不适用”。
这就是为什么,如果你想检查某些东西是否为NULL,你可以使用:
where something is null
而不是:
where something = null
如果 想要将NULL
值视为相等,则可以执行以下操作:
where TB.CollectionID = CollectionID
or (TB.CollectionID is null and CollectionID is null)
但这与SQL三值逻辑的整个概念背道而驰。
另外,不要让你的自己的系统缺乏权力限制你可以做的事情。例如,请参阅SqlFiddle,它可以让您随意创建和操作数据库。
(a)当然,有些DBMS并不总是以有意义的方式遵循标准,例如某个大型供应商(没有名字,但它以o
开头,以racle
(b)结束,无法将零长度字符串存储到varchar类型字段中,而是将其强制转换为NULL
: - )
(b)或者在这种情况下,说它以NULL
开头并以oracle
结尾更有意义: - )