mysql - 何时使用 WHERE c.column = null 的 SQL 子句?
问题描述
我花了相当多的时间来理解支持 null 和 SQL 标准的语言的不匹配,其中 c.col = null 返回 0 行,即使 c.col 中有包含 null 的行。我开始想知道在什么用例中有人想在 SQL 的 where 子句中使用 c.col = null。
如果我在 WHERE c.col 为空时,我确实清楚地知道了这一点,我会返回 c.col 包含空值的行。这引出了一个问题,c.col = null 必须有一个用途和理由才能具有不同的行为。应该是有人用的吧?然后我很好奇我们什么时候这样做的背景?
(我看到很多人(包括我在内)认为在 SQL 中 WHERE c.col=null 会导致所有行在列 col 中都为空)。但是,我也意识到有些上下文我不知道,并且对有人可能会执行 c.col = null 的上下文感到好奇。
谢谢,院长
解决方案
NULL
是一个特殊值,表示没有值。使用运算符将列与 NULL 进行比较=
是未定义的。
相反,您应该使用is
来获取具有NULL
以下值的列
select *
from yourTable
where columnName is null
例如,假设您有下表customer
,并且您想查找未由具有 referee_id 的人推荐的名称2
。
| name | referee_id|
+------+-----------+
| Will | NULL |
| Jane | NULL |
| Alex | 2 |
| Bill | NULL |
| Zack | 1 |
| Mark | 2 |
您的预期输出应该是
| name |
+------+
| Will |
| Jane |
| Bill |
| Zack |
要使您的输出正确,您还需要考虑带有NULL
值的 referee_id,因此您的查询应该是
select
name
from customer
where referee_id <> 2
or referee_id is null
推荐阅读
- google-cloud-platform - 使用 GCP AutoML 进行自定义实体提取的预测是否存在页面限制
- c++ - 有什么方法可以在虚幻引擎中查看 stdout 或 stderr 的输出?
- typescript - 打字稿:在文件级别声明类型,而不是数据结构
- bash - 循环遍历每一行 - 尝试过 PS 和 CMD
- javascript - 如何从 URL 获取元数据
- ios - 无法从“App.js”解析“@react-navigation/drawer”-React Native
- java - 如何使用gensim从给定的单词列表中获取前n个相似的单词到向量?
- css - 转盘高度调节
- r - 使用函数或循环创建闪亮的 UI 元素
- sql - 将表格转换为特定列