我有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行,即test和testproduct。
感谢。
答案 0 :(得分: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
答案 1 :(得分: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小提琴: