提高包含子查询的视图的性能

编程入门 行业动态 更新时间:2024-10-09 17:22:14
本文介绍了提高包含子查询的视图的性能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

SELECT dbo.EmployeeMaster.Employee_Id, dbo.EmployeeMaster.Emp_Id, dbo.EmployeeMaster.Emp_Name, FIRSTIN.Shift_Id, FIRSTIN.EmpPresent_EntryDate, FIRSTIN.EmpPresent_InTime AS FirstInTime, LASTOUT.EmpPresent_OutTime AS LastOutTime, FIRSTIN.EmpPresent_EmpInTime AS Emp_FirstInTime, LASTOUT.EmpPresent_EmpOutTime AS Emp_LastOutTime, FIRSTIN.Status , FIRSTIN.EmpPresent_Permission, FIRSTIN.EmpPresent_Remarks AS FirstRemark, FIRSTIN.EmpPresent_permission_by, FIRSTIN.Remark_for_permission, dbo.EmployeeMaster.Emp_Category_Id, FIRSTIN.EmpPresent_Id, dbo.EmployeeMaster.Emp_ConId, dbo.EmployeeMaster.Emp_ConName, dbo.EmployeeMaster.OTAllow FROM dbo.EmployeeMaster INNER JOIN dbo.EmpPresentDetail AS FIRSTIN ON dbo.EmployeeMaster.Employee_Id = FIRSTIN.Employee_Id INNER JOIN dbo.EmpPresentDetail AS LASTOUT ON dbo.EmployeeMaster.Employee_Id = LASTOUT.Employee_Id AND FIRSTIN.EmpPresent_EntryDate = LASTOUT.EmpPresent_EntryDate WHERE (FIRSTIN.EmpPresent_Id = (SELECT MIN(EmpPresent_Id) AS Expr1 FROM dbo.EmpPresentDetail WHERE (Employee_Id = FIRSTIN.Employee_Id) AND (EmpPresent_EntryDate = FIRSTIN.EmpPresent_EntryDate) ) ) AND (LASTOUT.EmpPresent_Id = (SELECT MAX(EmpPresent_Id) AS Expr1 FROM dbo.EmpPresentDetail AS EmpPresentDetail_2 WHERE (Employee_Id = LASTOUT.Employee_Id) AND (EmpPresent_EntryDate = LASTOUT.EmpPresent_EntryDate) AND (EmpPresent_EmpOutTime IS NULL OR EmpPresent_EmpOutTime = (SELECT MAX(EmpPresent_EmpOutTime) AS Expr1 FROM dbo.EmpPresentDetail AS EmpPresentDetail_1 WHERE (Employee_Id = LASTOUT.Employee_Id) AND (EmpPresent_EntryDate = LASTOUT.EmpPresent_EntryDate)))))

我想仅使用不包含subquery的内部联接进行此查询joinnings ... 让我知道是否需要进一步的帮助. 问候

SELECT dbo.EmployeeMaster.Employee_Id, dbo.EmployeeMaster.Emp_Id, dbo.EmployeeMaster.Emp_Name, FIRSTIN.Shift_Id, FIRSTIN.EmpPresent_EntryDate, FIRSTIN.EmpPresent_InTime AS FirstInTime, LASTOUT.EmpPresent_OutTime AS LastOutTime, FIRSTIN.EmpPresent_EmpInTime AS Emp_FirstInTime, LASTOUT.EmpPresent_EmpOutTime AS Emp_LastOutTime, FIRSTIN.Status , FIRSTIN.EmpPresent_Permission, FIRSTIN.EmpPresent_Remarks AS FirstRemark, FIRSTIN.EmpPresent_permission_by, FIRSTIN.Remark_for_permission, dbo.EmployeeMaster.Emp_Category_Id, FIRSTIN.EmpPresent_Id, dbo.EmployeeMaster.Emp_ConId, dbo.EmployeeMaster.Emp_ConName, dbo.EmployeeMaster.OTAllow FROM dbo.EmployeeMaster INNER JOIN dbo.EmpPresentDetail AS FIRSTIN ON dbo.EmployeeMaster.Employee_Id = FIRSTIN.Employee_Id INNER JOIN dbo.EmpPresentDetail AS LASTOUT ON dbo.EmployeeMaster.Employee_Id = LASTOUT.Employee_Id AND FIRSTIN.EmpPresent_EntryDate = LASTOUT.EmpPresent_EntryDate WHERE (FIRSTIN.EmpPresent_Id = (SELECT MIN(EmpPresent_Id) AS Expr1 FROM dbo.EmpPresentDetail WHERE (Employee_Id = FIRSTIN.Employee_Id) AND (EmpPresent_EntryDate = FIRSTIN.EmpPresent_EntryDate) ) ) AND (LASTOUT.EmpPresent_Id = (SELECT MAX(EmpPresent_Id) AS Expr1 FROM dbo.EmpPresentDetail AS EmpPresentDetail_2 WHERE (Employee_Id = LASTOUT.Employee_Id) AND (EmpPresent_EntryDate = LASTOUT.EmpPresent_EntryDate) AND (EmpPresent_EmpOutTime IS NULL OR EmpPresent_EmpOutTime = (SELECT MAX(EmpPresent_EmpOutTime) AS Expr1 FROM dbo.EmpPresentDetail AS EmpPresentDetail_1 WHERE (Employee_Id = LASTOUT.Employee_Id) AND (EmpPresent_EntryDate = LASTOUT.EmpPresent_EntryDate)))))

I Want to This Query using Only Inner join which not contains subquery

解决方案

Create CTEs which calculate the max/min grouped on the columns in where clause and use those CTEs with joinnings... Let me know if further assistance is required. Regards

更多推荐

提高包含子查询的视图的性能

本文发布于:2023-10-19 17:31:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1508255.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   性能

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!