2012-11-08 2 views
1

내가하고 싶은 일은 상당히 간단하지만 내가 가져온 데이터는 매우 다양하다고 생각합니다. 내가 뭘하려고 오전SQL에서 다중 테이블의 합

select sum(cast(vi.qty - vi.unredeemed as bigint)) 
    from red.dbo.setup vc 
    full join red.dbo.test bt 
    on bt.batch_no = vc.batch_no 
    join red.dbo.live vi 
where vi.date_issued between '2012-01-01' and '2012-01-01' 
    and vc.denom ='1' 
    and substring(vi.issue_id,3,1) = '4' 

한 행의 구속 총을 제공하기 위해 다음 함께 참여하고 뺀 미 회수의 결과 qty의 합을 3 개 테이블을 조인입니다.

나는 나의 합계 필드에 다양한 수정을 시도했지만 숫자는 다시 내가 그들을 곱 생각 거대한 보인다. 내가 사용하지 않은

잠시 동안 조인 나는 약간 녹슨입니다.

+0

'dbo.live'에 조인 조건이 없습니다.이 쿼리는 작동하지 않습니다. 또한, 왜 전체 참여? – Ben

답변

1

두 번째 조인 (dbo.live)에있는 모든 조건을 부여하지 않은 당신이 합류 누구와. 또 다른 한 가지는 당신이 언급 한 것입니다. 전체 또는 왼쪽 또는 오른쪽 조인트입니까?

+0

죄송합니다. 저는 VMware 클라이언트에서 복사했습니다. 두 번째 조인 밑에 선이 있습니다. – Will

+0

은 vc.denom = vi.denom에 대해 말합니다. 참여에 관해서는 원래 내부 조인을 위해 설정했지만, 내가 원했던 모든 데이터를 얻지 못했습니다. – Will

+0

귀하의 데이터가 무엇이고 어떤 결과가 나타나고 있습니까? 그것은 작거나 큰 – polin

1

당신의 문제가 당신의 상태에 따라 달라집니다 것이 두 번째 JOIN

select SUM(CAST(vi.QTY -vi.unredeemed as bigint)) 
from red.dbo.setup vc 
FULL Join red.dbo.test bt on bt.batch_no = vc.batch_no 
JOIN red.dbo.live vi ON ?? -- something needs to be added here, like vi.someId =vc.someOtherId 

where vi.date_issued between '2012-01-01' and '2012-01-01' and vc.denom ='1' and  SUBSTRING(vi.ISSUE_ID,3,1) ='4' 

자네 말이 맞아위한 ON 절을 남겨이다, 당신은 관찰 "곱셈"효과가 누락으로 인한 Cartesian product 때문이다 ON 절. ON 절이 지정되지 않은 간단한 JOIN은 CROSS JOIN이됩니다.