2011-10-25 3 views
0
여기

(나는 같은 메타 데이터 값이있는 모든 파일을 검색하는 쿼리를 작성하려는 DB 스키마PostgreSQL을 - 가입 3 개 테이블 하위 쿼리 키 값 쌍

에게 테이블 -

enter image description here

입니다 'abc') 및 해당 파일에 대한 특정 메타 데이터 값을 가져옵니다.

위의 경우 abc1 값 중 하나 인 모든 파일을 검색하고 해당 'geo'키 값을 제공합니다. 하위 쿼리로 수행 할 수 있음을 알고 있습니다. 그러나 가장 효율적인 방법을 찾고 싶습니다.

답변

1

다음과 같이 표시 될 수 있습니다. 가장 효율적인 방법이어야합니다.

SELECT m0.m_value 
FROM metadata m 
JOIN file_metadata fm ON fm.m_foreign_key = m.m_id 
JOIN file_metadata fm0 ON fm0.f_foreign_key = fm.f_foreign_key 
--      AND fm0.m_foreign_key <> fm.m_foreign_key 
-- may or may not be necessary, depending on the selectivity of 'geo' 
JOIN metadata m0 ON m0.m_id = fm0.m_foreign_key 
WHERE m.m_value = 'abc1' 
AND m0.key = 'geo' 

하나의 쿼리에서 동일한 테이블의 여러 인스턴스에 별칭을 지정해야합니다.

관련 검색어 기술에 대한 개요는 How to filter SQL results in a has-many-through relation을 참조하십시오.

+0

'geo'의 선택성은 무엇을 의미합니까? – Harpreet

+0

@Harpreet 'm_key'가 유일하지 않은 경우 - 특히 'm.m_key ='geo '가있을 수있는 경우 주석 처리 된 절이 차이를 만듭니다. –

+0

질문에서 '기술'(관계형 부문, 단순화 된 형태 임에도 불구하고)이 여기에서 직접 관련이 있다고 생각하지 않습니다. – onedaywhen