Sql 我的查询需要很长时间才能执行
您可以使用联接而不是相关子查询重写查询:Sql 我的查询需要很长时间才能执行,sql,sql-server-2008,Sql,Sql Server 2008,您可以使用联接而不是相关子查询重写查询: SELECT DISTINCT servRole, (SELECT PositionLongtext FROM tblPositionMaster tpm WHERE tsc.servRole = tpm.tblID) AS ServPositionID, (SELECT EmployeeName
SELECT DISTINCT servRole,
(SELECT PositionLongtext
FROM tblPositionMaster tpm
WHERE tsc.servRole = tpm.tblID) AS ServPositionID,
(SELECT EmployeeName
FROM tblEmployeeList te
WHERE tsc.ECNoServ = te.ECNo
AND te.PeriodName = @PeriodName) AS SERVName,
(SELECT ECNo
FROM tblEmployeeList tl
WHERE tsc.ECNoServ = tl.ECNo
AND tl.PeriodName = @PeriodName) AS ECNoServ,
CustRole,
(SELECT PositionLongtext
FROM tblPositionMaster tpm
WHERE tsc.CustRole = tpm.tblID) AS CustPositionID,
(SELECT EmployeeName
FROM tblEmployeeList tm
WHERE tsc.ECNOCust = tm.ECNo
AND tm.PeriodName = @PeriodName) AS CUSTName,
(SELECT ECNo
FROM tblEmployeeList tel
WHERE tsc.ECNOCust = tel.ECNo
AND tel.PeriodName = @PeriodName) AS ECNOCust,
(SELECT DirectoryName
FROM tblAttributeDirectory td
WHERE td.DirectoryID = tsc.DirectoryID) AS DirectoryName,
(SELECT DirectoryID
FROM tblAttributeDirectory td
WHERE td.DirectoryID = tsc.DirectoryID) AS DirectoryID,
FinalscoreEmp,
Flag
FROM tblServToCustMapping tsc
WHERE tsc.PeriodName = @PeriodName
ORDER BY ECNoServ
我看不到任何问题,你可以把这个查询重写得更简单。这里没有任何不精确的东西。但我会创建它。我不擅长sql。@SudhirYadav-你应该阅读这篇文章阅读基本sql教程,查找内部联接章节。它给出错误,“无法绑定多部分标识符t1.ECNo”。@SudhirYadav-很抱歉,它是tl而不是t1。我更新了我的答案,请尝试我的eidt。
SELECT DISTINCT
servRole,
tpm.PositionLongtext AS ServPositionID,
te.EmployeeName AS SERVName,
tl. ECNo AS ECNoServ,
CustRole,
tpm.PositionLongtext AS CustPositionID,
tm.EmployeeName AS CUSTName,
tel.ECNo AS ECNOCust,
td2.DirectoryName AS DirectoryName,
td2.DirectoryID AS DirectoryID,
FinalscoreEmp,
Flag
FROM tblServToCustMapping tsc
INNER JOIN tblPositionMaster tpm ON tsc.servRole = tpm.tblID
INNER JOIN tblEmployeeList te ON tsc.ECNoServ = te.ECNo
INNER JOIN tblEmployeeList tl ON tsc.ECNoServ = tl.ECNo
INNER JOIN tblPositionMaster tpm ON tsc.CustRole = tpm.tblID
INNER JOIN tblEmployeeList tm ON tsc.ECNOCust = tm.ECNo
INNER JOIN tblEmployeeList tel ON tsc.ECNOCust = tel.ECNo
INNER JOIN tblAttributeDirectory td1 ON td.DirectoryID = tsc.DirectoryID
INNER JOIN tblAttributeDirectory td2 ON td.DirectoryID = tsc.DirectoryID
WHERE tsc.PeriodName = @PeriodName
AND te.PeriodName = @PeriodName
AND tl.PeriodName = @PeriodName
AND tel.PeriodName = @PeriodName
AND tm.PeriodName = @PeriodName
ORDER BY ECNoServ;