如何从单列提取双值?关联两表将单表列映射为结果两列
解决方法:通过多次关联同一张表实现单列值拆分展示
这其实是个很典型的多表关联场景,核心就是多次关联同一个基础表(table1),分别匹配不同的关联条件,从而把单列的name值拆分成结果里的xName和yName两列。
完整SQL查询语句
SELECT t2.name, t1_x.name AS xName, t1_y.name AS yName FROM table2 t2 -- 第一次关联table1,匹配xID获取xName JOIN table1 t1_x ON t2.xID = t1_x.id -- 第二次关联table1,匹配yID获取yName JOIN table1 t1_y ON t2.yID = t1_y.id;
关键思路拆解
- 我们把
table1当作两个独立的“数据源”来用,通过**别名(t1_x和t1_y)**区分,避免字段冲突; - 第一次关联:用
table2.xID和table1.id匹配,拿到对应的name并命名为xName; - 第二次关联:用
table2.yID和table1.id匹配,拿到对应的name并命名为yName; - 最终把
table2的name和这两个新列组合起来,就得到了你想要的结果。
验证结果
执行上面的SQL后,输出会完全符合你的期望:
| name | xName | yName |
|---|---|---|
| Opqr | James | John |
| Pqrs | John | Jack |
| Qrst | Jack | James |
| Rstu | John | James |
这种方法的核心就是重复关联同一张表,只要有不同的关联条件,就能从同一列中提取出多个对应的值,展示成结果里的不同列,非常适合处理这种“一对多映射”的场景。
内容的提问来源于stack exchange,提问作者Blablabla
相关产品推荐
相关产品推荐

