如何与Where子句中的Case进行比较

孙雷欧

这里有个人和地址表。某些个人可能有地址或没有地址。如果他们有地址,则想加入地址表,否则无需加入。请帮助解决这种情况。

select p.name,nvl(a.address,'address not available') from person p,address a
where p.id = 2 and case
            when p.addid is not null
              then   p.addid = a.id
             else 0=0 end   
lc。

通用的解决方案-使用布尔逻辑。您不能在使用CASE的完整表达式之间进行选择,因此您应该重写它以使用AND和OR的组合。使用问题的逻辑,您可以将其重写为:

WHERE p.id = 2
AND 
(
    (p.addid IS NOT NULL AND p.addid = a.id)
    OR (p.addid IS NULL AND 0=0)
)

最终简化为:

WHERE p.id = 2
AND (p.addid IS NULL OR p.addid = a.id)

针对您的查询特定解决方案-使用更好的JOIN语法,并且只需利用LEFT JOIN:

SELECT p.name, nvl(a.address,'address not available')
FROM person p
LEFT OUTER JOIN address a ON p.addid = a.id
WHERE p.id = 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章