2010-03-02 5 views
1

외국 테이블에서 여러 행을 선택 SQL은 우리가 테이블 호출 한 '토큰'여러 열 우리의 PostgreSQL DB에

token_id | file_cc | file_cc2 | file_cc3 | file_ob 

모든 열 'file_'접두사는 '파일'테이블의 id를 포함 :

file_id | name | location | hash 

는 내가 원하는 토큰을 선택하고 결과 집합에 모든 파일 컬럼에 대한 파일 테이블에서 이름과 위치를 추가하는 것입니다.

select * from tokens t 
left join files f 
on (t.file_cc = f.file_id) 

어떤 아이디어이 켜짐 : 당신은 하나 개의 칼럼에 가입 할 수 있기 때문에이 수행-수하지 않는 것 가입으로

?

답변

1

파일 테이블에 4 번 참여하거나 다음과 같은 쿼리를 사용하여 file_ids를 얻기 위해 토큰을 네 번 쿼리합니다 (인덱스로 인해 값이 싼). 그러면 파일 테이블에 대해 하나의 쿼리가 실행됩니다 .

select * from files 
where file_id in (select file_cc from tokens where token_id = ?) 
     or file_id in (select file_cc2 from tokens where token_id = ?) 
     or file_id in (select file_cc3 from tokens where token_id = ?) 
     or file_id in (select file_ob from tokens where token_id = ?); 
2

나는 ON 절에 여러 조건을 지정할 수 있습니다. 그래서 당신은 할 수 있어야한다 :

SELECT * FROM tokens t 
LEFT JOIN files f 
    WHERE 
     t.file_cc = f.file_id OR 
     t.file_cc2 = f.file_id OR 
     t.file_cc3 = f.file_id OR 
     t.file_ob = f.file_id; 

을하고 동일한 결과를 얻을해야 문제가 해결되지 않으면

SELECT * FROM tokens t 
LEFT JOIN files f 
    ON (t.file_cc = f.file_id OR 
     t.file_cc2 = f.file_id OR 
     t.file_cc3 = f.file_id OR 
     t.file_ob = f.file_id); 

, 당신은 조건 WHERE에 ON 조건을 변환 할 수 있습니다.