2012-07-10 57 views
2

希望這是簡單的事情,但我想要做的只是爲CartContents表中的每個產品拉回1行。我遇到的問題是某些產品有多個圖像,因此如果鏈接到產品的圖像超過1個,則會返回這些圖像。Inner Join,每個產品只返回1行

這是我創建的,但它仍然拉回每個產品的多行。

SELECT DISTINCT (pri.FileName), p.Title, tc.Quantity, tc.FK_ProductID 
    FROM [Ordering].[CartContents] tc 
    INNER JOIN [Ordering].[Products] p ON p.ProductID = tc.FK_ProductID 
    INNER JOIN [Ordering].[ProductImages] pri on pri.FK_ProductID = p.ProductID 
    WHERE FK_UserID = @FK_UserID 

感謝

+0

什麼數據庫引擎?如果每個產品只有1行 - 哪一個? – 2012-07-10 21:09:14

+0

你想要在單行或只是第一個圖像返回兩個圖像? – Erica 2012-07-10 21:09:38

+0

看到這裏:http://stackoverflow.com/questions/2043259/sql-server-how-to-join-to-first-row同樣的事情解釋得很好。 – 03Usr 2012-07-10 21:18:03

回答

4

「中的」 將擺脫這個問題,假設你沒有足夠的文件名:

SELECT p.Title, tc.Quantity, tc.FK_ProductID 
FROM [Ordering].[CartContents] tc INNER JOIN 
    [Ordering].[Products] p 
    ON p.ProductID = tc.FK_ProductID 
where p.ProductID in (select pri.FK_ProductID 
         from [Ordering].[ProductImages] pri 
        ) and 
     FK_UserID = @FK_UserID 

的文件名,你必須選擇一個arbitarily:

SELECT min(pri.FileName) as FileName, Title, tc.Quantity, tc.FK_ProductID 
FROM [Ordering].[CartContents] tc INNER JOIN 
    [Ordering].[Products] p 
    ON p.ProductID = tc.FK_ProductID INNER JOIN 
    [Ordering].[ProductImages] pri on pri.FK_ProductID = p.ProductID 
where FK_UserID = @FK_UserID 
group by Title, tc.Quantity, tc.FK_ProductID 
+0

謝謝戈登,這是完美的 – Steve 2012-07-10 21:30:14