使用 WHERE IS NULL returns 所有值

Using WHERE IS NULL returns all values

我有一个连接三个表的查询,returns 一个别名计算作为最终字段。当连接的字段中存在空值时,该值通常为空值。加入效果很好。

我想 return 只记录我在计算字段中出现空值的位置。

但是如果我添加

WHERE field_name IS NULL

到最后我没有任何记录

如果我加上

WHERE field_name IS NOT NULL

我得到了整个集,我可以看到几条记录实际上是空的

任何关于为什么或如何解决这个问题的解释?

编辑:我为我的案例找到了解决方案。字段名称是上述计算的别名。当我在 where 子句中复制计算时,而不是输入别名,它 运行 是正确的。

给定一个外连接:

select *
from table1
left join table2 on table2.table1_id = table1.id

is null 过滤器应用到已连接的 table 的方法是将其放在连接条件中:

select *
from table1
left join table2 on table2.table1_id = table1.id
    and table2.col1 is null

不是

select *
from table1
left join table2 on table2.table1_id = table1.id
where table2.col1 is null

因为如果连接未命中,连接的 table 中的所有列都是空的,所以在 where 中使用 is null 将 return 连接到行的所有行有一个空 所有未连接的行。\

我找到了解决方案。字段名称是上述计算的别名。当我在 where 子句中复制计算时,没有输入别名,而是 运行 正确。