[英]oracle sql query statement NVL not working as desired
我正在尝试学习oracle sql,下面是我的查询。 我想打印每个人的经理,如果某人不是经理,那么它应该返回“ Noone”。
问题:我得到的是空白声明,而不是“ Noone”。 有什么帮助吗?
SELECT NVL(m.first_name || ' '
|| m.last_name, 'No One') || ' supervises '
|| w.first_name || ' ' || w.last_name
FROM employees w, employees m
WHERE w.manager_id = m.employee_id(+);
NVL(M.FIRST_NAME||''||M.LAST_NAME,'NOONE')||'SUPERVISE
------------------------------------------------------
James Smith supervises Ron Johnson
Ron Johnson supervises Susan Jones
Ron Johnson supervises Fred Hobbs
supervises James Smith
我相信可以通过以下方式简化公认的答案:认识到在不受监督的情况下,将没有与其经理匹配的记录。 其结果是, 无论是经理人的姓氏和名字要么是NULL
或不NULL
在一起。
SELECT NVL(m.first_name, 'No One', m.first_name || ' ' || m.last_name)
|| ' supervises ' || w.first_name || ' ' || w.last_name
FROM employees w LEFT JOIN employees m
ON w.manager_id = m.employee_id
更新:
(+)
运算符是Oracle对LEFT JOIN
的语法。 请查看此Stack Overflow文章,以了解有关Oracle (+)
运算符的更多信息。
这是因为原因,当管理者的m.first_name和m.last_name为null时,则m.first_name || ''|| m.last_name不会为空,但会带有''。 因此,它将打印空间而不是“ Noone”。 您可以使用nvl2之类的方法来达到所需的结果
SELECT NVL2( m.first_name ||m.last_name , m.first_name || ' ' || m.last_name, 'No One' )
|| ' supervises '
|| w.first_name
|| ' '
|| w.last_name FROM employees w, employees m WHERE w.manager_id = m.employee_id(+);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.