我无法测试是否null = null,因为我没有权限在我正在使用的数据库上创建数据.
我的问题是:
如果我有一个包含两行的表:
Row 1: ItemID = 1, CollectionID = 1, Price = null
Row 2: ItemID = 2, CollectionID = 1, Price = null
Run Code Online (Sandbox Code Playgroud)
我的查询如下:
SELECT CollectionID
FROM my_table TB
WHERE Price >= (SELECT avg(Price)
FROM my_table
WHERE TB.CollectionID = CollectionID);
Run Code Online (Sandbox Code Playgroud)
会collectionID 1在结果中显示吗?换句话说,我们有for 和for的空值.TB.CollectionIDCollectionID
有TB.CollectionID = CollectionID吗?
不,NULL等于没有其他值,包括另一个实例NULL(一般来说这适用于SQL,而不仅仅是Oracle (a)).
那是因为NULL它不是一个价值,而是一个意味着"未知","不可用"或"不适用"的实体.
这就是为什么,如果你想检查某些东西是否为NULL,你可以使用:
where something is null
Run Code Online (Sandbox Code Playgroud)
而不是:
where something = null
Run Code Online (Sandbox Code Playgroud)
如果您确实希望将NULL值视为相等,则可以执行以下操作:
where TB.CollectionID = CollectionID
or (TB.CollectionID is null and CollectionID is null)
Run Code Online (Sandbox Code Playgroud)
但这与SQL三值逻辑的整个概念背道而驰.
而且,顺便说一句,不要让你自己系统上缺乏权力限制你可以做的事情.例如,请参阅SqlFiddle,它可以让您随意创建和操作数据库.
(a)当然,虽然某些DBMS并不总是以有意义的方式遵循标准,例如某个大型供应商(没有名称,但它o以racle (b)开头和结尾)无法存储将零长度字符串转换为varchar类型字段,而不是将其强制为NULL:-)
(b)或者也许在这种情况下,说它开始NULL并结束时更有意义oracle:-)
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |