1

2 つのテーブルがあります。1 つは製品のリストで、もう 1 つは 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

上記の結果のように、私がやろうとしているのは、test と testproduct の 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 に答える