Oracle 11g基于日期关联两张表,为表B补充CUSTOMID字段求助
Oracle 11g 基于日期关联补充字段解决方案
表结构梳理
表A(客户日期区间表)
CUSTOMID:客户ID(需补充至表B的字段)START_DATE:客户生效起始日期END_DATE:客户生效截止日期
表B(订单表)
ORDERID:订单IDORDER_DATE:订单日期
预期结果
为表B的每条订单记录匹配对应日期区间内的CUSTOMID,生成包含ORDERID、ORDER_DATE、CUSTOMID的结果集。
查询语句实现
方法1:LEFT JOIN关联(推荐,保留表B所有记录)
SELECT b.ORDERID, b.ORDER_DATE, a.CUSTOMID FROM 表B b LEFT JOIN 表A a ON b.ORDER_DATE BETWEEN a.START_DATE AND a.END_DATE;
方法2:子查询(适用于单日期仅匹配一个客户区间的场景)
SELECT ORDERID, ORDER_DATE, (SELECT CUSTOMID FROM 表A a WHERE b.ORDER_DATE BETWEEN a.START_DATE AND a.END_DATE) AS CUSTOMID FROM 表B b;
注意事项
- 若单个订单日期匹配到表A中多个客户区间,会返回多条重复订单记录,需根据业务规则添加额外过滤条件(如取最新生效的客户ID、指定区间优先级等)。
- 使用
LEFT JOIN可保证表B中无匹配区间的订单记录也被保留,此时CUSTOMID字段值为NULL。
内容的提问来源于stack exchange,提问作者Steve88
相关产品推荐
相关产品推荐

