繁体   English   中英

当 SQL 中存在 NULL 连接值时故意显示 NULL

[英]Showing NULL on purpose when a NULL joined value is present in SQL

我有一个包含一些输入值的表和一个包含如下查找值的表:

select input.value, coalesce(mapping.value, input.value) result from (
    select 'a' union all select 'c'
) input (value) left join (
    select 'a', 'z' union all select 'b', 'y'
) mapping (lookupkey, value) on input.value = mapping.lookupkey

这使:

value | result
--------------
a     | z
c     | c

即我想显示原始值以及映射值,但如果没有,则显示原始值作为结果。

到目前为止,上述方法在使用coalesce确定是否存在映射值时效果很好。 但是现在如果我允许 NULL 作为有效的映射值,我希望将 NULL 作为结果而不是原始值,因为它确实找到了映射值,只是映射值为 NULL。 上面相同的代码未能实现这一点:

select input.value, coalesce(mapping.value, input.value) result from (
    select 'a' union all select 'c'
) input (value) left join (
    select 'a', 'z' union all select 'b', 'y' union all select 'c', null
) mapping (lookupkey, value) on input.value = mapping.lookupkey

它给出了与上面相同的输出,但我想要的是:

value | result
--------------
a     | z
c     | NULL

有没有可以实现我想要的coalesce的替代方法?

我认为你只想要一个case表达式,例如

select input.[value]
  , coalesce(mapping.[value], input.[value]) result
  , case when mapping.lookupkey is not null then mapping.[value] else input.[value] end new_result
from (
    select 'a'
    union all
    select 'c'
) input ([value])
left join (
    select 'a', 'z'
    union all
    select 'b', 'y'
    union all
    select 'c', null
) mapping (lookupkey, [value]) on input.[value] = mapping.lookupkey

返回:

value   result  new_result
a       z       z
c       c       NULL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM