这里有个人和地址表。某些个人可能有地址或没有地址。如果他们有地址,则想加入地址表,否则无需加入。请帮助解决这种情况。
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
的通用的解决方案-使用布尔逻辑。您不能在使用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] 删除。
我来说两句