如何将单表多列关联至另一表单列并生成teamid列
解决方案:关联多列到单列生成teamid
这个需求很常见,核心是先从TeamInOut表的In和Out列里提取出有效的团队名称,再关联teams表拿到对应的id。
思路分析
观察你的表数据可以发现,每一行里In和Out总有一列是有效的团队名(另一列是-)。所以我们可以先把-转换成NULL,再用COALESCE()函数取第一个非NULL的团队名,最后用这个名称关联teams表即可。
具体SQL代码
SELECT tio.In, tio.Out, t.id AS teamid FROM TeamInOut tio JOIN teams t ON t.team_name = COALESCE(NULLIF(tio.In, '-'), NULLIF(tio.Out, '-'));
代码解释
NULLIF(tio.In, '-'):把In列中值为-的记录转换成NULL,其他值保持不变;同理处理Out列。COALESCE(...):从处理后的In和Out值里,返回第一个非NULL的结果——也就是当前行的有效团队名称。- 关联
teams表:用提取到的团队名称匹配teams表的team_name,拿到对应的id作为teamid。
验证结果
执行这段SQL后,会完全输出你期望的结果:
| In | Out | teamid |
|---|---|---|
| - | teamA | 1 |
| teamB | - | 2 |
| - | teamC | 3 |
| teamD | - | 4 |
| - | teamD | 4 |
如果你的实际表中,空值不是-而是空字符串或NULL,只需要调整NULLIF的参数即可(比如空字符串用NULLIF(tio.In, ''),如果是NULL可以直接去掉NULLIF,只用COALESCE(tio.In, tio.Out))。
内容的提问来源于stack exchange,提问作者Andiastika Intan Pratiwi Hasan
相关产品推荐
相关产品推荐

