2009-05-22 3 views
2

테이블 2 개, 제품 테이블 및 이미지 테이블이 있습니다. 제품에는 레코드 당 두 개 이상의 이미지가있을 수 있습니다. 제품 당 모든 이미지가 아닌 제품 당 1 개의 이미지를 나열하는 SQL 문이 필요합니다.SQL : 1 대 다수 관계에서 부모 당 하나의 자식 레코드를 표시하는 문

SELECT Product.RefCode, Img.ImgPath 
FROM Product INNER JOIN (
    SELECT ProductImg.ImgPath, ProductImg.PrdFK 
    FROM ProductImg 
    LIMIT 0,1) AS Img ON Product.PrdID = Img.PrdFK; 

위의 예 내가 서브에서 LIMIT 0,1를 제거하면 나는 모든 제품의 전체 목록을 SELECT, 그러나, 0 결과를 반환

A는 현재의 내 노력의 예입니다 축소 및 모든 이미지.

제품 레코드 당 1 개의 이미지 레코드 만 반환하면됩니다.


나는 "프로그래머"코드를 MySQL에 맞게 수정했으며 정상적으로 작동합니다.

SELECT Product.RefCode, 
     (Select ProductImg.ImgPath 
     From ProductImg 
     Where Product.PrdID = Img.PrdFK LIMIT 0,1) AS ImgPath 
FROM Products 

"Bill Karwin의"솔루션을 시도 할 때 어떤 이유로 인해 서버로드가 오랜 시간 동안 보냈습니다.

답변

1

이 작동합니다 :

SELECT Product.RefCode, 
     (Select Img.ImgPath 
     From ProductImg 
     Where Product.PrdID = Img.PrdFK LIMIT 0,1) As ImgPath 
FROM Product 

당신이 선택 반환, 당신은 하위 선택에 어디서 어쩌면 주문을 추가 할 수 있습니다해야하는 이미지를 결정하는 방법이있는 경우.

다음 예에서는 최신 활성 이미지 만 가져옵니다.

SELECT Product.RefCode, 
     (Select Img.ImgPath 
     From ProductImg 
     Where Product.PrdID = Img.PrdFK 
      And IsActive = 1 
     Order By EntryDate Desc LIMIT 0,1) As ImgPath 
FROM Product 

'상단 1'에서 '제한 0,1'으로 수정 및 수정되었습니다.

+0

TOP 키워드는 Microsoft SQL Server (및 Sybase)의 독점권입니다. –

+0

미안하지만, 나는 몰랐다. 고맙습니다. –

+0

나는 작은 개정판을 만들었지 만 (위 참조) 성명서는 괜찮았다. – ticallian

0

MySQL에는 약간의 유연성이 있습니다. GROUP BY를 사용하여 결과를 제품 당 한 행으로 제한하면 MySQL은 임의의 이미지를 임의로 선택합니다. 실제로는 데이터베이스에 실제로 물리적으로 저장된 이미지 인 경향이 있지만이를 제어 할 수는 없습니다. 당신은 제품 당 1 개 특정 이미지를 원하는 경우

SELECT p.RefCode, i.ImgPath 
FROM Product p INNER JOIN ProductImg i 
    ON (p.PrdID = i.PrdFK) 
GROUP BY p.PrdID; 

, 너무 그렇게 할 수있는 방법이 있습니다. 이를 요구 사항에 포함시켜야합니다. 당신은 이미지 테이블에 ID 열이있는 경우 :-)

0

,이 (상관없이 SQL 제품 또는 버전) 작동 안 -

SELECT 
      p.RefCode, 
      i1.ImgPath 
    FROM 
      Product p 
    INNER JOIN 
      ProductImg i1 ON p.PrdId = i1.PrdFk 
    LEFT JOIN 
      ProductImg i2 ON i1.PrdId = i2.PrdId 
      AND i1.ImgId < i2.ImgId 
    WHERE 
      i2.ImgId IS NULL 
0

당신 이미지 테이블에 표시 할 주 이미지인지 여부를 지정하는 플래그가 필요합니다. 임의의 이미지를 가져 오는 방법이 있지만 올바른 이미지를 가져 오는 것이 더 낫다고 생각합니다.

관련 문제