2013-04-23 28 views
2

我想从我的表Jobs中返回几行,而且还要从表JobProducts(其中每个JobProduct都有到期日期)的下一个截止日期。SQL交叉连接错误无法绑定多部分标识

我有以下至今

SELECT J.CustomerID, J.JobID, J.Status, 
J.Deleted, J.JobNo, Customers.CompanyName AS [Company], 
J.DateCreated AS [Date Created], derivedtbl_1.DueDate AS [Due Date] 
FROM Jobs J 
LEFT OUTER JOIN 
Customers ON J.CustomerID = Customers.CustomerID CROSS JOIN 
(SELECT TOP (1) DueDate, JobProductID, JobID, ProductID, DepartmentID 
FROM  JobProducts AS JobProducts_1 
WHERE JobProducts_1.JobID = J.JobID 
ORDER BY DueDate) 
AS derivedtbl_1 

,但我得到的错误 多部分标识符“J.JobID”无法绑定。

任何帮助将不胜感激

回答

5

该错误似乎来自SQL Server。我认为你是在混淆CROSS JOIN(至极是笛卡尔乘积)与CROSS APPLY

SELECT J.CustomerID, 
     J.JobID, 
     J.Status, 
     J.Deleted, 
     J.JobNo, 
     Customers.CompanyName AS [Company], 
     J.DateCreated AS [Date Created], 
     derivedtbl_1.DueDate AS [Due Date] 
FROM Jobs J 
LEFT JOIN Customers 
    ON J.CustomerID = Customers.CustomerID 
CROSS APPLY (SELECT TOP (1) DueDate, 
          JobProductID, 
          JobID, 
          ProductID, 
          DepartmentID 
      FROM JobProducts AS JobProducts_1 
      WHERE JobProducts_1.JobID = J.JobID 
      ORDER BY DueDate) 
AS derivedtbl_1 
0

你可以尝试改变交叉联接交叉应用

CROSS APPLY 
(SELECT TOP (1) DueDate, JobProductID, JobID, ProductID, DepartmentID 
FROM  JobProducts AS JobProducts_1 
WHERE JobProducts_1.JobID = J.JobID 
ORDER BY DueDate) 
相关问题