SQL Server中的此查询需要哪个Join

时间:2017-02-24 19:45:38

标签: c# sql-server join pagination

我需要返回分页结果,即来自名为properties的表中的第二个五个记录。这与此查询单独有效:

SELECT  
    Property_ID, 
    Property_Type, 
    Address_Line, 
    Area, 
    Postcode, 
    Weekly_Rate 
FROM
    dbo.Properties 
WHERE   
    Area LIKE '%" + value + "%' 
ORDER BY 
    Property_ID 
    OFFSET " + (start*end) + " ROWS 
    FETCH NEXT " + end + " ROWS ONLY"

上面的代码是用C#添加的。

但我还需要Images表中的第一个Image ID,它引用分页子集中返回的每条记录。

我尝试了一个FULL OUTER JOIN并且没有返回预期的内容,可能是因为每个属性有多个图像。

任何解决方案都会很棒!

由于

这似乎差不多有效,但它返回了一个错误:

SELECT 
    dbo.Properties.Property_ID, Property_Type, dbo.Images_Table.[URL]
FROM 
    dbo.Properties p 
OUTER APPLY
    (SELECT TOP 1 i.*
     FROM dbo.Images_Table i
     WHERE i.Property_ID = p.Property_ID
     ORDER BY i.Image_ID) i
WHERE 
    p.Area LIKE '%po%' 
ORDER BY 
    p.Property_ID 
    OFFSET 0 ROWS 
    FETCH NEXT 5 ROWS ONLY

这是返回的错误:

  

Msg 4104,Level 16,State 1,Line 1
  无法绑定多部分标识符“dbo.Properties.Property_ID”。

     

Msg 4104,Level 16,State 1,Line 1
  无法绑定多部分标识符“dbo.Images_Table.URL”。

1 个答案:

答案 0 :(得分:1)

您可以使用outer apply

SELECT . . . , i.??
FROM dbo.Properties p OUTER APPLY
     (SELECT TOP 1 i.*
      FROM images i
      WHERE i.Property_ID = p.Property_ID
      ORDER BY i.Image_ID
     ) i
WHERE p.Area LIKE '%" + value + "%' 
ORDER BY p.Property_ID 
OFFSET " + (start*end) + " ROWS 
FETCH NEXT " + end + " ROWS ONLY";

这对你如何订购图像有点推测。您还需要从images表中填写所需的列。