我有一个表EMP,其列如下:
onSubmit(db: AngularFireDatabase ) {
console.log("New Task",this.newTask);
this.todosEdit.subscribe(snapshots=> {
snapshots.forEach(snapshot => {
if(snapshot.val().id){
this.todoListHighestId = snapshot.val().id;
//console.log("this.todoListHighestId",this.todoListHighestId, snapshot.val().id)
}
else {
this.todoListHighestId = 10;
}
});
});
this.finalObject = {
'id' : this.todoListHighestId+1,
'title' : this.newTask.title,
'description' :this.newTask.description,
'status':true,
'completed' :false,
'userID':this.newTask.userID
};
this.todosEdit.subscribe(todosData=>{
console.log("todosData ",todosData);
})
//push(this.finalObject);
console.log("final OBject",this.finalObject);
this.newTask = new todo();
/* To reset the form*/
this.active=false;
setTimeout ( ()=> this.active=true,0);
/* To reset the form*/
}
我想列出所有员工的姓名及其经理姓名,包括那些没有经理的人。对于这些员工,他们的经理姓名应显示为“BOSS”。
答案 0 :(得分:2)
以下查询应该有效:
select e.ename, (case when m.ename is null then 'BOSS' else m.ename end) as mgrName
from emp e
left join emp m on m.empno = e.mgr_id
答案 1 :(得分:2)
在我看来,Charanjith提出了更好的解决方案。
在Oracle中,我们甚至可以使用NVL函数而不是“case when”来替换null值。结果应该是一样的。
select e.ename empName, NVL(m.ename, 'BOSS') mgrName from emp e
left join emp m on m.empno = e.mgr_id
此外,我们可以看到另一种解决方案:当管理器存在时,使用内部联接来过滤emp。然后为所有没有经理的员工加入工会。
select e.ename empName, m.ename mgrName from emp e inner join emp m on e.mgr_id = m.empno
union
select e.ename empName, 'BOSS' mgrName from emp e where not exists (select 1 from emp m where e.mgr_id = m.empno)
答案 2 :(得分:0)
这在oracle中工作正常:
SELECT e.ename,
nvl(m.ename, 'BOSS')mgr
FROM emp a
LEFT JOIN emp b
ON m.empno = e.mgr_id;