【问题标题】:My query takes very long time to execute it [closed]我的查询需要很长时间才能执行它[关闭]
【发布时间】:2014-01-15 19:38:47
【问题描述】:
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 

【问题讨论】:

  • 我在任何地方都看不到问题
  • 您可以重写该查询以使其更简单
  • 没有任何 inex。但我会创建它。我的sql不好。
  • @SudhirYadav - 你应该阅读这个stackoverflow.com/questions/3449814/…
  • 阅读基本 SQL 教程,查找 INNER JOIN 章节

标签: sql sql-server-2008


【解决方案1】:

您可以使用JOINs 而不是相关子查询来重写查询:

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;

【讨论】:

  • 它给出错误,'无法绑定多部分标识符“t1.ECNo”。'
  • @SudhirYadav - 抱歉是 tl 而不是 t1 我更新了我的答案,试试我的 eidt。
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 2016-04-22
  • 2021-12-25
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多