SQL中拆分Reviewer id列并关联表获取姓名填充新列的实现方法
实现思路
- 首先拆分表1的
Reviewer id/s字段,按分隔符;切割为2个独立的审核人ID,分别作为Name1、Name2的关联键 - 分别将两个切割后的ID与表2的
Reviewer id关联,获取对应人员的First Name和Last name拼接为全名 - 无匹配ID的场景(比如示例中的126)可按需返回空值或者自定义占位符
示例SQL(通用语法,可根据你使用的数据库调整切割函数即可)
SELECT t1.`Reviewer id/s`, -- 关联第一个ID取姓名 CONCAT(t2_1.`First Name`, ' ', t2_1.`Last name`) AS `Name 1`, -- 关联第二个ID取姓名 CONCAT(t2_2.`First Name`, ' ', t2_2.`Last name`) AS `Name 2` FROM 表1 t1 -- 切割第一个ID关联表2 LEFT JOIN 表2 t2_1 ON CAST(TRIM(SUBSTRING_INDEX(t1.`Reviewer id/s`, '; ', 1)) AS UNSIGNED) = t2_1.`Reviewer id` -- 切割第二个ID关联表2 LEFT JOIN 表2 t2_2 ON CAST(TRIM(SUBSTRING_INDEX(t1.`Reviewer id/s`, '; ', -1)) AS UNSIGNED) = t2_2.`Reviewer id`
注:如果是PostgreSQL数据库,切割函数替换为
SPLIT_PART(t1."Reviewer id/s", '; ', 1)和SPLIT_PART(t1."Reviewer id/s", '; ', 2)即可,SQL Server则用STRING_SPLIT或者SUBSTRING配合CHARINDEX实现。
执行后返回结果示例
| Reviewer id/s | Name 1 | Name 2 |
|---|---|---|
| 123; 124 | Apple A | Banana B |
| 126; 156 | NULL | Orange I |
如果需要直接更新表1的Name1和Name2字段,把SELECT语句换成UPDATE语法即可,MySQL环境示例:
UPDATE 表1 t1 LEFT JOIN 表2 t2_1 ON CAST(TRIM(SUBSTRING_INDEX(t1.`Reviewer id/s`, '; ', 1)) AS UNSIGNED) = t2_1.`Reviewer id` LEFT JOIN 表2 t2_2 ON CAST(TRIM(SUBSTRING_INDEX(t1.`Reviewer id/s`, '; ', -1)) AS UNSIGNED) = t2_2.`Reviewer id` SET t1.`Name 1` = CONCAT(t2_1.`First Name`, ' ', t2_1.`Last name`), t1.`Name 2` = CONCAT(t2_2.`First Name`, ' ', t2_2.`Last name`);
内容的提问来源于stack exchange,提问作者Hayley
相关产品推荐
相关产品推荐

