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 行,即测试和测试产品。

谢谢。

4

2 回答 2

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

于 2012-04-14T21:19:19.283 回答
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

于 2012-04-14T21:19:44.460 回答