2017-04-11 14 views
0

我有兩個表。表一是包含每日交易數據的事實表。另一個是維度表,它具有從日期到日期的範圍信息。我加入了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

不相關,但是:你應該學會使用現代的,顯式的'JOIN'語法來代替'WHERE'子句中的古老而脆弱的隱式連接 –

回答

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 
    );