2012-04-14 6 views
1

私は2つのテーブルを持ち、1つはプロダクトのリストであり、もう1つはプロダクトIDによってリンクされたプロダクトイメージテーブルです。テーブル上で別個に返す

私は以下の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 

--result

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

どちらの画像を取得しますか?集計関数(MI​​NまたはMAXとGROUP BYと同様)を使用して、目的の関数を選択します。 MIN(FileName)は例ですが、あなたはおそらく異なる基準を持っています。 – Glenn

+0

どのrdbmsを使用していますか、いくつかのagg関数は実装固有のものです –

答えて

1

あなたが製品別グループと(あなたが製品を表現したいイメージに応じて、またはその他の方法)MAXのイメージをつかむことができます:あなたは明確なを返すことができhttp://www.sqlfiddle.com/#!3/6f498/2

+0

ありがとう、それは完璧です! – Steve

0

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 

デモを

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

関連する問題