有没有办法让这个SQL更有效率?
发布时间:2020-12-12 16:25:58 所属栏目:MsSql教程 来源:网络整理
导读:请考虑以下表格: 部 deptid (type:INT)deptname (type: TEXT)hours (type:INT)active (type:BIT) 雇员 empid (type:INT)empname (type: TEXT)deptid (type: INT)designation (type: TEXT)salary (type: INT) 编写查询以返回属于这些列的员工的empname和deptn
请考虑以下表格:
部 deptid (type:INT) deptname (type: TEXT) hours (type:INT) active (type:BIT) 雇员 empid (type:INT) empname (type: TEXT) deptid (type: INT) designation (type: TEXT) salary (type: INT) 编写查询以返回属于这些列的员工的empname和deptname列 这是我的看法: SELECT e1.empname,d.deptname from employee AS e1 FULL JOIN department AS d on e1.deptid = d.deptid WHERE e1.deptid IN( SELECT deptid FROM( SELECT e2.deptid,COUNT(e2.empid) FROM employee AS e2 GROUP BY e2.deptid HAVING COUNT(e2.empid) >= 4 ) ) ORDER BY empname; 你会如何改进? 解决方法这个更短,也可能更快SELECT e1.empname,d.deptname from ( SELECT e2.deptid FROM employee AS e2 GROUP BY e2.deptid HAVING COUNT(e2.empid) >= 4 ) G inner join employee AS e1 on e1.deptid = G.deptid INNER JOIN department AS d on d.deptid = G.deptid ORDER BY e1.empname; 从分组开始.内部查询不需要COUNT. 使用INNER JOIN是因为一旦计数完成,我们就已经知道了 >员工存在>部门存在 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |