2010-08-22 2 views
0

속성 목록을 검색하려고하는데이 작업을 수행하려면 4 개의 테이블을 하나로 묶어야합니다. 표는 property, property_type, state 및 photo입니다.속성의 기본 이미지 만 가져 오기

문제는 속성의 기본 이미지 만 얻는 중입니다. 가장 낮은 순위의 사진이 기본값이어야합니다. 따라서 속성 10에 2 장의 사진이있는 경우 하위 값이있는 사진보다이 결과 집합에 있어야합니다.

내가 지금까지 무엇을 가지고 있는지 살펴보고, 지금까지 내가 한 것을 설명해야합니다. 기본적으로 해당 속성에 할당 된 사진 ID를 포함하여 속성 목록을 표시합니다. 불행히도 추가 결과를 없애기 위해 GROUP BY를 사용하고 있기 때문에 불행히도 5 개의 사진이 할당되어 있으면 5 개의 행을 필요로하지 않습니다. 사진 순위에 따라 정렬하면 결과가 바뀔 것입니다.

SELECT 
property.property_id, 
property.property_name, 
state.state_id, 
state.state_name, 
photo.photo_id, 
photo.rank 
FROM property 
JOIN photo 
ON property.property_id = photo.property_id 
JOIN property_type 
ON property.property_type_id = property_type.property_type_id 
JOIN state 
ON property.state_id = state.state_id  
GROUP BY property.property_id 
ORDER BY 
state.state_name ASC, 
property.property_name ASC, 
photo.rank ASC 

누구나 올바른 방향으로 나를 가리킬 수 있습니까? 한 가지 유의할 것은 이미 완료된이 프로젝트에 들어갈 것입니다. 따라서 데이터베이스 구조는이 시점에서 변경할 수 없습니다.

답변

2

사용 :

SELECT p.property_id, 
     p.property_name, 
     s.state_id, 
     s.state_name, 
     x.photo_id, 
     x.rank 
    FROM PROPERTY p 
    JOIN PHOTO x ON x.property_id = p.property_id 
    JOIN (SELECT ph.property_id, 
       MIN(ph.rank) AS min_rank 
      FROM PHOTO ph 
     GROUP BY ph.property_id) y ON y.property_id = x.property_id 
            AND y.min_rank = x.rank 
    JOIN PROPERTY_TYPE pt ON pt.property_type_id = p.property_type_id 
    JOIN STATE s ON s.state_id = p.state_id 
GROUP BY p.property_id 
ORDER BY s.state_name, p.property_name 

는 내가의 PHOTO 테이블의 사본에 자체 조인 PROPERTY_ID 값에 따라 최소 순위를하려면 어떻게 쿼리를 변경. PHOTO 테이블에 다시 가입함으로써 가장 낮은 순위의 PHOTO 레코드 만 반환되도록 할 수 있습니다.

+0

Uhm .. "ON x.property_id"에 구문 오류가 없습니까? Upvoted 때문에 접근 방식이 옳다. – Radu094

+0

@ Radu094 : Thx가 수정되었습니다. 내가 사진 물건에 너무 많은 관심을 지불했다 :) –

+0

감사합니다! 이것은 완벽하게 작동합니다. – Roeland