0

manager_idあるテーブルの を別のテーブルの の値に結合できる2 つのテーブルの左外部結合を行っていますemployee_id。私が書いたクエリは実行されますがnvl()、null 値を文字列「NO_MANAGER」に置き換えるために使用しようとしています。しかし、これは私が代わりに得るものです:

select d.DEPARTMENT_ID, d.DEPARTMENT_NAME, nvl(d.manager_id, 0) AS MANAGER_ID, d.LOCATION_ID, 
nvl(e.first_name || ' ' || e.LAST_NAME,'NO_MANAGER') AS NAME 
from departments d
left join employees e on d.manager_id = e.EMPLOYEE_ID order by d.DEPARTMENT_ID;

返されるのは次のとおりです。何か 不足していますか、この場合は機能しませんか?
ここに画像の説明を入力
nvl()

4

3 に答える 3

0

これは、次の場合に発生します。

e.first_name || ' ' || e.LAST_NAME

自動的に文字列と連結された null 値は、null とは異なる文字列値に変換されます。これは暗黙のキャストであり、nvl は null を見つけることができません。

これを試すことができます(またはもちろん別のソリューション)

select d.DEPARTMENT_ID, d.DEPARTMENT_NAME, nvl(d.manager_id, 0) AS MANAGER_ID, d.LOCATION_ID, 
nvl(e.first_name,'NO_MANAGER') || nvl(e.LAST_NAME,'') AS NAME 
from departments d
left join employees e on d.manager_id = e.EMPLOYEE_ID order by d.DEPARTMENT_ID;
于 2015-12-07T01:18:20.627 に答える
0

これはあなたのために働きますか:

select d.DEPARTMENT_ID, d.DEPARTMENT_NAME,
 ifnull(d.manager_id, 0) AS MANAGER_ID, d.LOCATION_ID, 
if(e.first_name is null or e.LAST_NAME is null,'NO_MANAGER',
 concat(e.first_name, ' ', e.LAST_NAME)) AS NAME 
from departments d
left join employees e on d.manager_id = e.EMPLOYEE_ID 
order by d.DEPARTMENT_ID;

?

于 2015-12-04T01:39:13.237 に答える