조건
- 조건 1 - image 테이블의 articleNo이 중복된 행은 하나의 행만 출력되고 중복되지 않은 행은 정상 출력
- 조건 2 - product 테이블의 productNo(PRIMARY KEY)과 image 테이블의 articleNo(FOREING KEY)이 같은 상품들과 imageFilename 출력
구현
SELECT p.*, i.*
FROM product p, (SELECT imageFilename, articleNo
FROM (SELECT imageNo, articleNo, imageFilename, imageType,
ROW_NUMBER() OVER (PARTITION BY articleNo ORDER BY imageNo ASC) AS rn
FROM image)
WHERE rn = 1) i
WHERE p.productNo = i.articleNo
ORDER BY productNo ASC;
- ROW_NUMBER() OVER (PARTITION BY articleNO ORDER BY imageNo ASC) AS rn
- ROW_NUMBER() : 순번을 적용시키는데 동일한 값이여도 순번을 나눈다
- 1, 1, 1 이라는 동일한 데이터가 있어도 ROW_NUMBER()이 적용되면 1,2,3으로 나눈다
- OVER (PARTITION BY [컬럼명1] ORDER BY [컬럼명2] [ASC/DESC/생략])
- [컬럼명2] 기준 정렬 후 [컬럼명1]을 쪼갠다.
- 쪼갠 [컬럼명1]의 값에 ROW_NUMBER() 적용
- WHERE rn = 1 : 1번에서 쪼개서 나온 순번 값이 1인 행만 가져온다