2012-04-14 2 views
1

2 개의 테이블이 있습니다. 하나는 제품 목록이고 다른 하나는 productID로 연결된 제품 이미지 테이블입니다.테이블에서 고유 한 반환

다음 SQL 쿼리를 작성했지만 일부 제품에 여러 이미지가있어 각 제품에 고유 한 문자를 반환하는 방법을 모르겠습니다. 난 단지 2 행, 즉 테스트 및 testproduct를 반환되는 것을 시도하고있는 무슨 위의 결과에서와 마찬가지로

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 

--Result

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 
.

감사합니다.

+0

어떤 이미지를 가져 오시겠습니까? GROUP BY와 함께 MIN 또는 MAX와 같은 집계 함수를 사용하여 원하는 것을 선택하십시오. MIN (FileName)은 예제이지만 다른 기준을 가지고있을 것입니다. – Glenn

+0

어떤 rdbms를 사용하고 있습니까, 일부 agg 함수는 구현에 따라 다릅니다 –

답변

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

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

관련 문제