2012-04-14 70 views
1

我有一個2表,一個是產品列表,另一個是productID鏈接的產品圖像表。返回不同的表格

我已經寫了下面的SQL查詢,但是我不確定如何只返回一個獨特的每個產品,因爲有些產品對他們有多個圖像。

SELECT p.ProductID, p.Title, pi.FileName 
    FROM [Ordering].[Products] p 
    JOIN [Ordering].[ProductImages] pi ON p.ProductID =pi.FK_ProductID 
    WHERE p.Title like '%' + @Title +'%' 
    ORDER BY p.Title ASC 

- 結果

ProductID Title     FileName 
5   test     5.jpg 
2   test product   4.jpg 
2   test product   3.jpg 
2   test product   2.jpg 
2   test product   1.jpg 

正如上面我所試圖做的僅僅是返回2行,即測試和testproduct結果。

謝謝。

+0

你想要哪個圖像?使用集合函數(如MIN或MAX和GROUP BY)來選擇你想要的。 MIN(FileName)是一個例子,但你可能有不同的標準。 – Glenn 2012-04-14 21:21:23

+0

您使用的是什麼rdbms,可用於您的一些agg函數是特定於實現的 – 2012-04-14 21:22:42

回答

1

您可以通過產品組,抓住MAX圖像(或根據其圖像要代表產品的一些其他方法):

SELECT p.ProductID, p.Title, MAX(pi.FileName) as FileName 
     FROM [Ordering].[Products] p 
INNER JOIN [Ordering].[ProductImages] pi ON p.ProductID =pi.FK_ProductID 
    WHERE p.Title like '%' + @Title +'%' 
    GROUP BY p.ProductID, p.Title 
    ORDER BY p.Title ASC 

演示:http://www.sqlfiddle.com/#!3/6f498/2

+0

謝謝,那很完美! – Steve 2012-04-14 22:07:28

0

你可以返回一個不同產品用逗號分隔的列表文件路徑列表:

SELECT 
    p.ProductID, 
    p.Title, 
    img.ImageFilePaths 
FROM [Products] p 
JOIN (
SELECT DISTINCT 
    t1.ProductID, 
    ImageFilePaths = SUBSTRING((SELECT (', ' + t2.FileName) 
         FROM [ProductImages] t2 
         WHERE t1.ProductID = t2.ProductID              
         FOR XML PATH('') 
      ), 3, 1000) 
      FROM [ProductImages] t1 
     GROUP BY t1.ProductID) img 
ON img.ProductID = p.ProductID 

而且使用@mellamokb小提琴:

http://www.sqlfiddle.com/#!3/a3103/8