2012-04-19 3 views
0

편집 : 신경 쓰지 말고, 알아 냈습니다.JOIN은 두 테이블에서 개별적으로 작동하지만 함께 사용할 때는 적용되지 않습니다.

PostgreSQL 8.4를 사용 중입니다.

다음은 실행해야하는 쿼리의 형식입니다. (편집증을 보호하기 위해 이름과 얼굴이 변경되었습니다. 필요한 경우 제공 될 수 있지만 스키마, 테이블 및 코드를 간단히 대체하여 내 쿼리의 직접 복사입니다. 열 이름) :

SELECT 
    t1.field, 
    SUM(v3.quantity) as current_qty 
FROM 
    schema1.child_table t1 
     JOIN (SELECT DISTINCT t1key FROM schema2.child_transaction t2 WHERE datefield BETWEEN '2012-04-01' AND '2012-04-19') t2 USING (t1key) 
     LEFT JOIN schema1.child_current_status v3 ON t1.t1key = v3.t1key 
     JOIN schema1.parent_table t4 ON t1.t4key = t4.t4key 
WHERE 
    t4.criteria = 763 
GROUP BY 
    t1.field 

... 기본적으로, 나는 criteriaparent_table 내 제공되는 데이터와 일치 할 때 child_table에서 field 필요하고, child_transaction에서 적어도 하나의 관련 트랜잭션이 요청 기간이있는 경우. child_current_status보기에 수량이있는 경우 해당 값도 필요합니다.

t1.field은 숫자 키 t4.criteria과 동일한 사람이 읽을 수있는 것으로 간주 할 수 있습니다.

내 문제는 제공된 데이터가 child_current_status의 수량 데이터를 제공하지 못한다는 것입니다.

편집 : 명확하게는, 위의 쿼리는 field, current_qty

나는 LEFT JOIN에, 그것은 관련 양의 데이터를 반환 변경할 때 때문에 문제가의 t2 하위 쿼리와 관련된를 반환해야 field, NULL을 반환 :

SELECT 
    t1.field, 
    SUM(v3.quantity) as current_qty 
FROM 
    schema1.child_table t1 
     LEFT JOIN (SELECT DISTINCT t1key FROM schema2.child_transaction t2 WHERE datefield BETWEEN '2012-04-01' AND '2012-04-19') t2 USING (t1key) 
     LEFT JOIN schema1.child_current_status v3 ON t1.t1key = v3.t1key 
     JOIN schema1.parent_table t4 ON t1.t4key = t4.t4key 
WHERE 
    t4.criteria = 763 
GROUP BY 
    t1.field 

편집 :이 수정 된 쿼리는 field, current_qty 반환하지만 요청 시간 child_transaction에서 트랜잭션이 있는지 여부 있도록 할 것 기간이 아닌가

... 내가 한 모든 작업은 첫 번째 JOIN을 LEFT JOIN으로 바꾸고 해당 쿼리를 child_current_status에 반환합니다. child_current_status을 INNER JOIN으로 변경하면 쿼리가 아무 것도 반환하지 않습니다. 첫 번째 JOIN을 LEFT JOIN으로 만드는 문제는 하위 쿼리에서 반환 된 데이터가있을 때만 결과를 반환해야한다는 것입니다.이 경우 요청 된 시간 간격이 있습니다.

물이 진흙 투성이가 되려면 일부로는t4.criteria으로, 763은 실패한 것입니다.

무엇이 여기에 있습니까?


짧은 버전 : 첫 번째는 INNER이 조인은 조인 위의 첫 번째 쿼리에서, 그것은 왼쪽 아무것도 돌아 오지 가입됩니다. LEFT JOIN 일 때 LEFT JOIN이 child_current_status이면 적절한 데이터를 반환하지만 첫 번째 JOIN의 목적을 무효화합니다.

편집 : 쿼리가 제대로 작동하는 내부 조인 뒤에 내가 변화없이

답변

0

윽로, 왼쪽은 FROM 절의 끝 부분에 가입 이동하려고했습니다, 신경 끄시 고, 내가 그것을 알아 냈어 여기서 다른 사람이 알아낼 수있는 충분한 데이터가 없습니다.기본적으로 child_table에는 한 어린이에 대해 하나의 거래가 있으며 child_table에는 다른 어린이의 현재 수량이 있습니다. 따라서 쿼리는 지정된 부모에 대해 지정된 시간 동안 트랜잭션이 있었던 모든 하위 항목에 현재 수량이 없음을 적절하게 나타냅니다.

이 쿼리의 결과를 처리 할 때 나는 모두 아이들과 관련된 현재 데이터를 요청했기 때문에 문제가 발생했습니다. 심지어이 쿼리 (정확하게)가 나에게 아무 것도 없다고 말했을 때조차도.

여기를 볼 필요는 없습니다.

+0

아마 여기에 볼 것이 없다는 것을 알아 내기 위해 질문을 비틀 거리지 않는 사람들을 위해 대답을 확인해야합니다. –

+0

StackExchange에서 허용 된대로 내 답변을 표시하려면 2 일을 기다려야한다고 알려줍니다. – Jason

+0

아, 죄송합니다. 나는 약간의 시간 제한이 있다는 것을 알고 있었고, 단지 대기 기간이 그렇게 길다는 것을 알지 못했다. –

관련 문제