2017-02-24 5 views
0

Ich muss paginierte Ergebnisse zurückgeben, d. H. Die zweiten fünf Datensätze aus einer Tabelle namens properties. Dies funktioniert mit dieser Abfrage allein:Welcher Join für diese Abfrage in SQL Server benötigt wird

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" 

Der obige Code wird mit C# hinzugefügt geschrieben.

Aber ich brauche auch die erste Image ID aus der Tabelle Images, die auf jeden Datensatz verweist, der in der paginierten Teilmenge zurückgegeben wird.

Ich versuchte einen FULL OUTER JOIN und es gab nicht zurück, was erwartet wurde, vielleicht weil es mehr als ein Bild pro Eigenschaft gibt.

Jede Lösung wäre großartig!

Dank

Dies scheint fast zu arbeiten, aber es ist ein Fehler zurückgegeben:

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 

Dies ist der Fehler zurückgegeben:

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dbo.Properties.Property_ID" could not be bound.

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dbo.Images_Table.URL" could not be bound.

+0

Welcher Zusammenhang besteht zwischen der Tabelle 'Properties' und der Tabelle' Images'? Tabellenschemas wären gut zu sehen. –

+0

PROPERTY_ID ist ein Fremdschlüssel in der Tabelle Bilder – Kieran

Antwort

1

Sie können outer apply verwenden:

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"; 

Dies ist ein wenig spekulativ, wie Sie die Bilder bestellen. Sie müssen auch die gewünschten Spalten aus der Tabelle images ausfüllen.

+0

ich diese in SQL-Server geschrieben. – Kieran

+0

SELECT dbo.Properties.Property_ID, Property_Type, dbo.Images_Table [URL] VON dbo.Properties p OUTER GILT (SELECT TOP 1 i . * FROM dbo.Images_Table i WHERE i.Property_ID = p.Property_ID ORDER BY i.Image_ID ) i WHERE '% po%' LIKE p.Area ORDER BY p.Property_ID "+ (Start OFFSET * Ende) + "ROWS FETCH NEXT" + Ende + "NUR ROWS – Kieran

+0

aber ich bekomme diesen Fehler – Kieran