oracle sql 查询语句 NVL 未按预期工作
oracle sql query statement NVL not working as desired
我正在尝试学习 oracle sql 以下是我的查询。我想打印每个人的经理,如果有人不是经理,那么它应该 return "No One".
问题:我得到的是空白语句而不是 "No One"。有帮助吗?
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
的语法。查看 this Stack Overflow article 以了解有关 Oracle 的 (+)
运算符的更多信息。
这是因为当 m.first_name 和 m.last_name 对经理来说为空时,那么 m.first_name || ' ' || m.last_name 不会导致 null,但带有 ' '。因此,它将打印 space 而不是 'No One'。你可以通过使用 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(+);
我正在尝试学习 oracle sql 以下是我的查询。我想打印每个人的经理,如果有人不是经理,那么它应该 return "No One".
问题:我得到的是空白语句而不是 "No One"。有帮助吗?
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
的语法。查看 this Stack Overflow article 以了解有关 Oracle 的 (+)
运算符的更多信息。
这是因为当 m.first_name 和 m.last_name 对经理来说为空时,那么 m.first_name || ' ' || m.last_name 不会导致 null,但带有 ' '。因此,它将打印 space 而不是 'No One'。你可以通过使用 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(+);