SQL : 한 번의 관계에서 부모 당 아동 기록 1 명을 보여주는 진술

StackOverflow https://stackoverflow.com/questions/896561

  •  23-08-2019
  •  | 
  •  

문제

2 개의 테이블, 제품 테이블 및 이미지 테이블이 있습니다. 제품은 레코드 당 1 개 이상의 이미지를 가질 수 있습니다. 제품 당 모든 이미지가 아닌 제품 당 1 개의 이미지를 나열하는 SQL 문이 필요합니다.

현재의 노력의 축소 된 예는 다음과 같습니다.

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;

위의 예는 0 결과를 반환하지만, 하위 선택에서 한계 0,1을 제거하면 모든 제품과 모든 이미지의 전체 목록을 얻습니다.

제품 레코드 당 1 개의 이미지 레코드를 반환하기를 원합니다.


MySQL로 "프로그래머"코드를 수정했으며 잘 작동합니다.

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

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

도움이 되었습니까?

해결책

이것은 작동해야합니다 :

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

편집 및 수정 된 'Top 1'에서 '제한 0,1'

다른 팁

MySQL은 여기에 약간의 유연성이 있습니다. 그룹을 사용하여 결과를 제품 당 하나의 행으로 제한 한 다음 MySQL은 임의로 어떤 이미지를 선택합니다. 실제로, 그것은 데이터베이스에서 물리적으로 먼저 저장된 이미지 인 경향이 있지만,이를 제어 할 수는 없습니다.

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

원한다면 1 특정한 제품 당 이미지,이를 수행하는 방법도 있습니다. 요구 사항에 포함시켜야합니다. :-)

이미지 테이블에 ID 열이있는 경우 (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

필요한 것은 이미지 테이블의 플래그가 표시 될 기본 이미지인지 지정합니다. 임의의 이미지를 가져 오는 방법이 있지만 올바른 이미지를 가져 오는 것이 더 낫다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top