【发布时间】:2011-05-31 04:10:11
【问题描述】:
这两个查询的结果怎么可能:
SELECT * FROM `workers` WHERE `name` = 'Smith`
和
SELECT * FROM `workers` WHERE NOT `name` = 'Smith`
不求和整个表workers?
【问题讨论】:
这两个查询的结果怎么可能:
SELECT * FROM `workers` WHERE `name` = 'Smith`
和
SELECT * FROM `workers` WHERE NOT `name` = 'Smith`
不求和整个表workers?
【问题讨论】:
因为name 字段中的NULL 不会进入任一查询。
在 SQL 使用的三元逻辑中,NULL = 'Smith' 和 NOT NULL = 'Smith' 都计算为 NULL 并被过滤掉。
使用NULL-安全比较运算符,<=>:
SELECT * FROM `workers` WHERE `name` <=> 'Smith`
和
SELECT * FROM `workers` WHERE NOT `name` <=> 'Smith`
【讨论】: