帮我分析一下代码需要改进的地方
问题:
代码:
SELECT d1.empno,d1.ename,d1.deptno,d1.sal,d1.grade,d1.time,d1.mgr,d2.ename,d2.dname
FROM
(SELECT e.empno,e.ename,d.deptno,e.sal,s.grade,
TIMEDIFF(NOW(),e.hiredate) AS time,e.mgr
FROM t_emp e JOIN t_dept d JOIN t_salgrade s
ON e.deptno=d.deptno
AND s.losal<e.sal<s.hisal) d1
JOIN
(SELECT e1.mgr,e2.ename,t.dname
FROM t_emp e1 JOIN t_emp e2 JOIN t_dept t
ON e1.mgr=e2.empno AND e1.deptno=t.deptno) d2
ON d1.mgr=d2.mgr;
表截图:
代码截图:
希望得到的帮助:
为什么我可以查出205条记录(右下角)
为什么我所有时间都为空
分析一下其他需要修改的地方
16
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小尤
2021-10-25 18:29:39
同学你好,使用同学的sql语句会查询到重复的数据,所以查询数据比较多(205条)如下所示:
则建议同学进行调整sql,直接使用连接表进行查询。如下所示:
select e1.empno,e1.ename,d.dname,e1.sal,s.grade,datediff(now(),e1.hiredate),e.ename,e.empno ,d1.dname from t_emp e1 left join t_dept d on e1.deptno = d.deptno left join t_salgrade s on e1.sal between s.losal and s.hisal left join t_emp e on e.empno = e1.mgr left join t_dept d1 on e.deptno = d1.deptno
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星