查询未正确加入,我该如何解决?

时间:2015-04-09 19:12:12

标签: mysql join left-join

我有一个大型查询,其结构如下:

主表LT_CHC_TOURS_RSV_CS有一堆t_dt列。

LTR_CHC_TOURS_RSV_PRICE的值为season

TR_SEASON还有season个自己的LTR_CHC_TOURS_RSV_PRICE值(对应start_dt),它还有end_dtp.season个字段

我想在我的查询中说,联接必须是a.t_dt字段必须与tr_season start_dt之间的end_dt日期相对应。 {1}}我不知道该怎么做。

我不确定我是否正确解释了这一点。

表格

tr_season

season desc    start_dt   end_dt
1     s1      1/1/2013   12/31/2013
2     s2      1/1/2014   12/31/2014
3     s3      1/1/2015   12/31/2015

LTR_CHC_TOURS_RSV_PRICE

season  price1   price2   price3
1        4         5        7
1        2         6        8     
1        7         5        9   

LT_CHC_TOURS_RSV_CS

t_dt      count
2/5/2013    6
2/7/2014    2
8/2/2015    3

季节匹配,计数将乘以定价。

我的查询(未完成)

select * -- a bunch of stuff 
FROM LT_CHC_TOURS_RSV_CS a
LEFT OUTER JOIN lv_customer_info1 b         on a.grp_attending = b.customer_no
LEFT OUTER JOIN lv_chc_order_detail_info o  on a.order_no = o.order_no 
LEFT OUTER JOIN LTR_CHC_TOURS_RSV_PRICE p   on /*this is where i'm stuck*/

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

select * -- a bunch of stuff 
FROM LT_CHC_TOURS_RSV_CS a
LEFT OUTER JOIN lv_customer_info1 b         on a.grp_attending = b.customer_no
LEFT OUTER JOIN lv_chc_order_detail_info o  on a.order_no = o.order_no 
JOIN TR_SEASON s     on a.t_dt between s.start_dt and s.end_dt
JOIN LTR_CHC_TOURS_RSV_PRICE p   on s.id = p.season 

通过这种方式,您可以查看t_dt字段,该字段应位于start_dtend_dt之间,然后使用该字段中的ID进行加入。

答案 1 :(得分:0)

没有数据库可以用于测试,我认为你正在寻找类似于以下内容的东西。我不是一个SQL专家,但我觉得这样的事情会起作用。

select * -- a bunch of stuff 
FROM LT_CHC_TOURS_RSV_CS a
LEFT OUTER JOIN lv_customer_info1 b         on a.grp_attending = b.customer_no
LEFT OUTER JOIN lv_chc_order_detail_info o  on a.order_no = o.order_no 
LEFT OUTER JOIN LTR_CHC_TOURS_RSV_PRICE p   on p.season = (
    SELECT season 
    FROM tr_season s 
    INNER JOIN LTR_CHC_TOURS_RSV_PRICE pr 
    ON pr.season = s.season
    WHERE (s.start_dt < pr.t_dt AND s.end_dt > pr.t_dt)
)