2017-04-11 1 views
0

두 테이블이 있습니다. 표 1은 일일 트랜잭션 데이터가 들어있는 팩트 테이블입니다. 다른 하나는 날짜와 범위 정보가있는 차원 테이블입니다. 두 테이블에 between 절을 결합합니다. 조인과 내부 조인 사이를 다시 작성할 수 있습니까?결합 해결 사이의 범위

표 1 :

dt_key prd_id 
20170401 1 
20170401 2 

표 2 :

frm_dt to_dt cost prd_id 
20170325 20170330 44 1 
20170331 20170401 12 1 
20170329 20170430 22 2 
20170331 20170401 24 2 

쿼리

select prd_id ,cost 
from table_1 a,table_2 b 
where a.prd_id=b.prd_id 
and a.dt_key between frm_dt and to_dt; 

내가 몇 가지 해결 방법은 피하고 싶어 사이에 가입하거나 하나 dt_key 같은 조인 조건을 추가/제수 = --------

어떤 논리를 제안해도 좋을 것입니다.

+1

왜 당신은 왜 beetwen 연산자를 좋아하지 않아 설명해 주시겠습니까? – krokodilko

+1

왜? 데이터 모델을 기반으로이 작업을 수행해야하는 것처럼 보입니다. prd_id에 가입하여 날짜 사이에 조인을 추가로 필터링하십시오. 날짜를 문자열로 저장하는 경우 데이터 모델에 다른 문제가 있습니다. – unleashed

+2

관련없는 : 그러나 당신은'WHO'' 절의 고대적이고 연약한 내재적 조인 대신 현대적이고 명시적인'JOIN' 문법을 사용하는 법을 배워야합니다. –

답변

0

제공 한 내용에 따라 다음을 제공했습니다. 그것은 본질적으로 동일한 쿼리입니다. 왜 다른 것을하고 싶은지 불분명합니다. 기본 조인 인 prd_id에서 테이블을 조인 할뿐만 아니라 문자열 날짜를 기준으로 조인을 제한합니다. 당신이 제공 한 정보에 기초하여 어떻게 다른 일을하는지 보지 못합니다.

SELECT 
    prd_id, 
    cost 
FROM 
    table_1 a 
    INNER JOIN table_2 b ON (
      a.prd_id = b.prd_id 
     AND 
      a.dt_key BETWEEN b.frm_dt AND b.to_dt 
    );