편집 : 신경 쓰지 말고, 알아 냈습니다.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
... 기본적으로, 나는 criteria
이 parent_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의 목적을 무효화합니다.
편집 : 쿼리가 제대로 작동하는 내부 조인 뒤에 내가 변화없이
아마 여기에 볼 것이 없다는 것을 알아 내기 위해 질문을 비틀 거리지 않는 사람들을 위해 대답을 확인해야합니다. –
StackExchange에서 허용 된대로 내 답변을 표시하려면 2 일을 기다려야한다고 알려줍니다. – Jason
아, 죄송합니다. 나는 약간의 시간 제한이 있다는 것을 알고 있었고, 단지 대기 기간이 그렇게 길다는 것을 알지 못했다. –