帮我分析一下代码需要改进的地方
问题:

代码:
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条记录(右下角)
为什么我所有时间都为空
分析一下其他需要修改的地方
正在回答 回答被采纳积分+1
同学你好,使用同学的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
祝学习愉快!
- 参与学习 人
- 提交作业 8789 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星