Oracle SQL中NVL函数未显示'NA'行问题排查求助
问题排查与解决方案
嘿,这问题的根源其实不在NVL函数的使用上,而是你选的连接类型不对!
你当前用的是INNER JOIN,这种连接的特性是只返回两个表中完全匹配连接条件的行。也就是说,如果某个度假村的managerid在manager表中找不到对应的记录,这行度假村数据根本不会被包含在查询结果里,自然也就没机会触发NVL去显示'NA'了。
要解决这个问题,你需要把连接类型改成左外连接(LEFT JOIN/LEFT OUTER JOIN),它会保留左表(这里是resort表)的所有行,右表(manager表)中匹配的行就显示对应数据,不匹配的行则用NULL填充,这时候NVL就能把这些NULL替换成你想要的'NA'了。
修改后的SQL语句如下:
select r.resortid, r.resortname, nvl(m.name, 'NA') as managername, nvl(m.phone, 'NA') as phoneno from resort r left join manager m on r.managerid = m.managerid order by r.resortid;
你可以执行这个语句试试,那些没有经理信息的度假村行就会显示'NA'啦!
内容的提问来源于stack exchange,提问作者yamini r
相关产品推荐
相关产品推荐

