如何基于ID范围关联COSTOMER与COSTOMER_GROUP表?
数据库表关联优化方案建议
现有数据表
表:COSTOMER
| ID | 姓名 | 城市 |
|---|---|---|
| 123 | 亚当 | 纽约 |
| 456 | 鲍勃 | 巴黎 |
| 789 | 凯茜 | 伦敦 |
| 321 | 丹尼尔 | 台北 |
表:COSTOMER_GROUP
| upper | lower | group |
|---|---|---|
| 111 | 222 | Gold |
| 223 | 332 | Silver |
| 333 | 747 | Platinum |
| 745 | 999 | Gold |
期望目标表
| ID | 姓名 | 城市 | group |
|---|---|---|---|
| 123 | 亚当 | 纽约 | Gold |
| 456 | 鲍勃 | 巴黎 | Platinum |
| 789 | 凯茜 | 伦敦 | Gold |
| 321 | 丹尼尔 | 台北 | Silver |
需求说明
每个客户根据ID归属到特定分组,COSTOMER_GROUP表定义了各分组的ID上下边界(例如ID在111-222之间属于Gold组),且各组区间无重叠、客户ID唯一。
我原本的思路是把COSTOMER_GROUP的区间展开成包含889条记录的表,再执行内关联,但觉得这种方法效率太低,想找更优的实现方式。
优化方案
不需要展开区间,直接通过区间匹配条件完成两张表的关联即可,SQL示例如下:
SELECT c.ID, c.姓名, c.城市, cg.group FROM COSTOMER c INNER JOIN COSTOMER_GROUP cg ON c.ID BETWEEN cg.lower AND cg.upper;
方案优势
- 避免冗余数据:无需生成大量中间记录,减少内存和存储资源消耗;
- 查询效率更高:直接通过区间条件匹配,数据库可以利用索引(比如给
COSTOMER.ID、COSTOMER_GROUP.lower/upper建立索引)快速定位匹配关系,远优于展开后再关联的方式; - 逻辑更简洁:直接体现业务规则,代码可读性更强,后续维护更方便。
内容的提问来源于stack exchange,提问作者daniel84101
相关产品推荐
相关产品推荐

