使用 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 子句中复制计算时,没有输入别名,而是 运行 正确。
我有一个连接三个表的查询,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 子句中复制计算时,没有输入别名,而是 运行 正确。