基于Table2的ID映射为Table1赋值的SELECT查询方案需求
基于SELECT的字段赋值解决方案
输入表信息
Table 1(待填充表)
| ID | value |
|---|---|
| 123 | null |
| 456 | null |
| 789 | maths |
| 246 | english |
| 135 | chemistry |
| 76899 | null |
Table 2(映射关系表)
| Previous ID | Next ID |
|---|---|
| 246 | 123 |
| 135 | 456 |
| 123 | 123 |
| 456 | 456 |
实现SQL语句
SELECT t1.ID, COALESCE(t1.value, t_map.value) AS Value FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.`Next ID` LEFT JOIN Table1 t_map ON t2.`Previous ID` = t_map.ID ORDER BY t1.ID;
逻辑说明
- 两次左关联确保保留Table1的所有记录,即使没有对应映射关系(比如ID=76899)
- 第一次关联:通过
Table1.ID = Table2.Next ID找到当前ID对应的源ID(Previous ID) - 第二次关联:通过
Table2.Previous ID = t_map.ID获取源ID对应的有效value值 COALESCE函数优先使用Table1自身的value,只有当自身value为null时,才采用映射得到的value- 最后按ID排序,保证输出顺序与预期一致
预期输出
| ID | Value |
|---|---|
| 123 | english |
| 456 | chemistry |
| 789 | maths |
| 246 | english |
| 135 | chemistry |
| 76899 | null |
内容的提问来源于stack exchange,提问作者Raven Smith
相关产品推荐
相关产品推荐

