SQL同表连接列问题求助:实现列表关联的客户数据整合
解决列表记录关联客户数据的SQL查询问题
问题说明
现有table_1表结构及数据如下:
| number | Customer | list |
|---|---|---|
| 321 | 4514 | |
| 321 | 2 | |
| 2 | 5321 | |
| 2 | 5555 |
业务规则:
list列有值时,该值对应一组客户(即number等于此list值的所有客户)Customer为空的行是列表记录,需要把该list值对应的客户数据关联过来,并且将这些客户的number替换为列表记录的number
最终需要得到的结果:
| number | Customer | list |
|---|---|---|
| 321 | 4514 | |
| 321 | 5321 | 2 |
| 321 | 5555 | 2 |
问题分析
你之前写的SQL逻辑没切中核心需求——外连接的关联条件无法实现"替换客户number为列表记录number"的目标,我们需要拆分两种数据处理:原有的正常客户记录,以及需要通过列表记录关联转换后的客户数据。
正确SQL实现
用UNION ALL组合两部分查询即可:
-- 保留原本的正常客户记录(有Customer值,无list值) SELECT number, Customer, list FROM table_1 WHERE Customer IS NOT NULL AND list IS NULL UNION ALL -- 处理列表记录:关联对应客户并替换number SELECT t_list.number AS number, t_cust.Customer, t_list.list FROM table_1 t_cust INNER JOIN table_1 t_list ON t_cust.number = t_list.list WHERE t_list.Customer IS NULL AND t_list.list IS NOT NULL
逻辑拆解
- 第一部分:直接筛选出不需要转换的原始客户记录,这部分直接输出即可。
- 第二部分:
t_list指代列表记录(Customer为空、list有值的行)t_cust指代该列表对应的客户(number等于t_list.list、有Customer值的行)- 关联后,用
t_list的number替换客户原本的number,同时保留客户的Customer和列表的list值,正好符合需求。
执行这段SQL就能得到你要的目标结果。
内容的提问来源于stack exchange,提问作者jontieez
相关产品推荐
相关产品推荐

