首页 > 解决方案 > is not null 不消除空值

问题描述

有人可以帮助并阐明为什么我仍然得到空值,即使表连接中的一个条件指定替代单元不能为空值。

只应显示一条记录且不包含空值

SELECT DISTINCT
CASE when oplistm.unit_code = 'CASE'  then ROUND(oplistm.price / conv_factor,2)
when oplistm.unit_code = 'KG' then ROUND(oplistm.price * conv_factor,2)
WHEN oplistm.unit_code = 'EACH' and stu.converted_unit = 'KG' and stu.converted_unit is not null then ROUND(oplistm.price / conv_factor,2)
WHEN oplistm.unit_code = 'EACH' and stu.converted_unit = 'CASE' and stu.converted_unit is not null then ROUND(oplistm.price * conv_factor,2)
end as 'alternative unit price',
stu.converted_unit as 'alternative unit'



FROM sys030.scheme.oplistm oplistm (nolock) 
left join sys030.scheme.stockm stockm (nolock) on stockm.product = oplistm.product_code
LEFT join sys030.scheme.stunitpm as stu (nolock) on stu.product = oplistm.product_code  and stockm.warehouse = stu.warehouse and stu.base_name = stockm.unit_code and stu.converted_unit is not null
WHERE oplistm.product_code <>'LIC' and oplistm.product_code <> ''  and stockm.product = 'M-47-68-BR-02-XX'

标签: sqlsql-servertsqlnull

解决方案


on您在外连接的子句中有这个条件:

stu.converted_unit is not null

尽管它确实过滤掉了 的converted_unitNULL,但LEFT JOIN可能只是将它们重新添加进来。

所以,如果你真的需要这个条件,把LEFT JOINs改成INNER JOINs。事实上,第一个实际上是一个INNER JOIN因为WHERE子句。


推荐阅读