题解 | #获取员工其当前薪水比其经理当前薪水高的相关信息#

获取员工其当前的薪水比其manager当前薪水还高的相关信息

https://www.nowcoder.com/practice/f858d74a030e48da8e0f69e21be63bef

以下为ai对我最下方代码检验:
重复列名:d.emp_no 和 dm.emp_no 都被选中,但它们都是 emp_no。这可能会导致结果集中的列名冲突。通常,如果两个表有相同的列名,并且你在查询中都选择了它们,你需要为其中一个或两个列名指定别名,以避免混淆。
左连接条件:你使用了 left join salaries s1 on dm.emp_no=s1.emp_no。这意味着,即使 dept_manager 表中的某个经理没有对应的薪资记录(在 salaries 表中),该经理仍然会出现在结果集中,但其 manager_salary 列将为NULL。这是否是你想要的行为?
比较NULL值:在 and s.salary > s1.salary 这个条件中,如果 s1.salary 是NULL,那么这个比较将不会按照你预期的方式工作。在SQL中,NULL与任何值的比较都会返回NULL,而不是TRUE或FALSE。因此,这个条件可能会排除那些 s1.salary 为NULL的记录,即使 s.salary 的值很大。
逻辑条件:where d.emp_no != dm.emp_no 这个条件确保员工和其经理不是同一个人。这是否总是你想要的?在某些情况下,一个人可能既是员工又是自己的经理(尽管这听起来很奇怪)。
日期条件:s.to_date='9999-01-01' 和 dm.to_date='9999-01-01' 这两个条件假设 '9999-01-01' 是一个表示“无结束日期”的特殊值。这是否是数据库中的实际表示方式?如果不是,这些条件可能不会按预期工作。
性能:这个查询涉及多个表的连接,可能会影响性能,特别是如果表很大且没有适当的索引时。
综上所述,这个查询是否有问题取决于你的具体需求和数据库的实际结构。你可能需要根据实际情况调整查询。



select d.emp_no,dm.emp_no,s.salary emp_salary,s1.salary manager_salary
from dept_emp d join dept_manager dm on d.dept_no=dm.dept_no
 join salaries s on d.emp_no=s.emp_no
 left join salaries s1 on dm.emp_no=s1.emp_no
 where d.emp_no != dm.emp_no and s.to_date='9999-01-01' and dm.to_date='9999-01-01'
and s.salary > s1.salary
 

全部评论

相关推荐

点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务