老师,请帮我看看这道题目~

老师,请帮我看看这道题目~

#外链接练习3: 查询每名员工的编号、姓名、部门、月薪、工资等级、上司编号、上司姓名、上司部门?
SELECT e.empno, e.ename, d.dname, e.sal+ IFNULL(e.comm,0), t.empno AS mgrno, t.ename AS mname, t.deptno AS mdnane
FROM t_emp e LEFT JOIN t_dept d ON e.deptno = d.deptno
LEFT JOIN
(SELECT e1.empno, e1.ename, d1.dname 
FROM t_emp e1 JOIN t_dept d1 
ON e1.deptno = d1.deptno) t 
ON e.mgrno = t.deptno

请问这个哪里出错了啊?这个工资等级怎么求呢?
           

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小脸 2021-12-03 10:24:50

同学你好,运行同学贴出的代码会发现问题依旧是最开始老师回答中出现的两点:

1、存在未知列"t.deptno" ,是因为同学的sq|中并未查询该字段,所以是不可以的

2、判断条件不正确,并不能使用表名别名, 所以需要你修改判断条件

如下根据你的sq|进行修改:

https://img1.sycdn.imooc.com//climg/61a9805e094dbffa09420592.jpg

祝学习愉快~


  • 提问者 Heijyu #1

    啊,昨天忘记保存更改了,问题主要是我想把工资等级也显示出来,但是最后加的好像没有效果啊:

    https://img1.sycdn.imooc.com//climg/61a98171091a100f16321126.jpg

    2021-12-03 10:31:32
  • 好帮手慕小脸 回复 提问者 Heijyu #2

    同学你好,没有显示等级,是因为你没有查询工资等级这个字段,这里应在select中添加s.grade即可

    https://img1.sycdn.imooc.com//climg/61a98dc00989360708800243.jpg

    祝学习愉快~

    2021-12-03 11:24:07
好帮手慕小小 2021-11-22 14:34:44

同学你好,sql运行后的报错如下:

1)上述sql运行的报错信息如下,表示:字段列表”中存在未知列“t.deptno”。这是由于查询出的中间表中不存在此列导致的,建议添加。

https://img1.sycdn.imooc.com//climg/619b3714099038df03600099.jpg

参考代码如下:

https://img1.sycdn.imooc.com//climg/619b37ee0924665107560295.jpg

2)但上述代码运行后仍失败,提示结果如下,表示:on子句中存在未知列“e.mgrno”,条件应是e.mgr=t.empno

https://img1.sycdn.imooc.com//climg/619b381c0908cc2f04130100.jpg

参考代码如下:

https://img1.sycdn.imooc.com//climg/619b38c109aeeb4707860660.jpg

求工资等级可参考如下sql实现需求:

-- 查询每名员工的编号、姓名、部门、月薪、工资等级、工龄、上司编号、上司姓名、上司部门
SELECT
	e.empno,e.ename,d.dname,
	e.sal+IFNULL (e.comm,0),s.grade,
	FLOOR(DATEDIFF(NOW(),e.hiredate)/365),
	t.empno AS mgrno,t.ename AS mname ,t.dname AS mdname
FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
	LEFT JOIN t_salgrade s ON e.sal BETWEEN s.losal AND s.hisal
	LEFT JOIN 
	   (SELECT e1.empno,e1.ename,d1.dname FROM t_emp e1 JOIN t_dept d1 ON e1.deptno=d1.deptno) t 
	ON e.mgr=t.empno;

祝学习愉快~

  • 提问者 Heijyu #1

    老师,我按照你的加入了s.grade,但是加入以后运行出错了:

    https://img1.sycdn.imooc.com//climg/61a827cf09e585f815200688.jpg

    2021-12-02 09:56:34
  • 好帮手慕小小 回复 提问者 Heijyu #2

    同学你好,报错信息显示“字段列表”中存在未知列“s.grade,建议同学查询下对应表中的列名是否是grade。

    https://img1.sycdn.imooc.com//climg/61a82d340914e13004180210.jpg

    上述sql运行结果如下:

    https://img1.sycdn.imooc.com//climg/61a8341709c6d24e16120590.jpg

    祝学习愉快~

    2021-12-02 10:49:48
  • 提问者 Heijyu 回复 好帮手慕小小 #3

    老师,是有的,但是放在一起不行啊,我把我的代码贴上来:

    #外链接练习3: 查询每名员工的编号、姓名、部门、月薪、工资等级、上司编号、上司姓名、上司部门?
    SELECT e.empno, e.ename, d.dname, e.sal+ IFNULL(e.comm,0), t.empno AS mgrno, t.ename AS mname, t.deptno AS mdnane
    FROM t_emp e LEFT JOIN t_dept d ON e.deptno = d.deptno
    LEFT JOIN
    (SELECT e1.empno, e1.ename, d1.dname 
    FROM t_emp e1 JOIN t_dept d1 
    ON e1.deptno = d1.deptno) t 
    ON e.mgrno = t.deptno
    LEFT JOIN t_salgrade s ON e.sal BETWEEN s.losal AND  s.hisal


    2021-12-03 09:59:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师