2013-03-26 3 views
2

Postgres 9.1을 사용 중이며 데이터가없는 일부 공백을 사용하여 결과를 얻고 싶습니다. 내 쿼리는 다음과 같습니다Postgres RIGHT JOIN (맞춤 배열 포함)

SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9) 

을 ... 그것이 배열의 institution_ids (1, 3, 4, 5, 7로 결과를 반환 단지 중요합니다,이 질문에 중요하지 않다, 9) 데이터가없는 기관도 포함됩니다. 여기

days treatments institution_id 
266 6996 4 
265 5310 1 
267 3361 5 
260 2809 3 
264 5249 7 

전류 출력의 예 내가 원하는 출력의 예입니다 내가 그러나 다음 쿼리

SELECT * FROM (SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9)) RIGHT JOIN generate_series(1,9) ON generate_series = institution_id WHERE generate_series IN (1, 3, 4, 5, 7, 9) 

를 사용하여이를 달성 할 수 알고

days treatments institution_id 
266 6996 4 
265 5310 1 
267 3361 5 
260 2809 3 
264 5249 7 
       9 

입니다, 이것은 generate_series (1,9)가 내가 관심이없는 institution_ids를 생성하기 때문에 추가 작업입니다. 그것은 최대 institution_id를 선험적으로 알고 있어야하며, WHERE 절을 제공합니다. (1, 3, 4, 5, 7, 9) 포스트 그레스가 가입 명령에 사용할 것을 단지 배열 인 경우 이상적으로 나는 다음과 같은

SELECT * FROM (SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9)) RIGHT JOIN (1, 3, 4, 5, 7, 9) ON generate_series = institution_id 

같은 쿼리를하고 싶습니다. 저는 이미 [1, 3, 4, 5, 7, 9]와 {1,3,4,5,7,9}도 사용하지 않았습니다.

아이디어가 있으십니까?

감사

답변

3
select i.days, i.treatments, s.id institution_id 
from 
    institution i 
    right join (
     values (1), (3), (4), (5), (7), (9) 
    ) s (id) on i.institution_id = s.id 

또는

select i.days, i.treatments, s.id institution_id 
from 
    institution i 
    right join 
    unnest(array[1, 3, 4, 5, 7, 9]) s (id) on i.institution_id = s.id 
+0

덕분에, 나는 두 번째 솔루션 (단순한 모양)와 함께 갈거야. 이것은 내가 찾고 있었던 바로 그 것이다. – Jon