SQL多表Join后产生重复记录的问题及解决需求
解决多表连接后出现重复记录的问题
你的问题出在连接条件只用到了cust_id,这会让penalty_a_type和penalty_b_type中同一个客户的所有记录互相匹配,产生笛卡尔积,最终出现重复行。
要精准匹配对应时间段的处罚数据,必须把start_date和end_date也加入连接条件——这三个表里,cust_id + start_date + end_date才是能对应到同一条业务记录的唯一组合键。
修正后的SQL代码如下:
SELECT m.cust_id, m.start_date, m.end_date, pa.penalty_a, pb.penalty_b FROM main_table m JOIN penalty_a_type pa ON m.cust_id = pa.cust_id AND m.start_date = pa.start_date AND m.end_date = pa.end_date JOIN penalty_b_type pb ON m.cust_id = pb.cust_id AND m.start_date = pb.start_date AND m.end_date = pb.end_date
执行后就能得到你想要的目标结果:
| cust_id | start_date | end_date | penalty_a | penalty_b |
|---|---|---|---|---|
| 10001 | 2022-12-01 | 2022-12-30 | 0 | 0 |
| 10001 | 2023-01-03 | 2023-02-01 | 0 | 4 |
另外你原SQL里的GROUP BY完全没必要,问题根源不是聚合需求,而是连接条件太宽松导致的重复。
内容的提问来源于stack exchange,提问作者Tahir Zamaan
相关产品推荐
相关产品推荐

