Snowflake中如何拆分字符串列并实现任一拆分值匹配的表关联?
在Snowflake中按拆分后的名称片段关联两张表
需求说明
需要关联Snowflake中的Candidate和Employee表,规则为:将Candidate表的CandidateName按空格拆分,只要拆分出的任意一个片段存在于Employee表的EmployeeName中,即完成两表关联。
示例:Ali - Hasan Khan拆分后得到Ali、-、Hasan、Khan,只要其中任一片段出现在某条Employee的EmployeeName里,即可关联该员工记录。
表结构与测试数据
Candidate表
| CandidateId | CandidateName |
|---|---|
| 1 | Muhammad Bilal |
| 2 | Ali - Hasan Khan |
| 3 | Tehseen Nawaz |
Employee表
| EmployeeName | StartDate |
|---|---|
| Muhammad Bilal | 2022-02-15 |
| Ali Hasan | 2022-03-17 |
| Tehseen Nawaz Virk | 2022-01-10 |
解决方案SQL
SELECT DISTINCT c.CandidateName, e.StartDate FROM Candidate c JOIN Employee e ON EXISTS ( SELECT 1 FROM TABLE(SPLIT_TO_TABLE(c.CandidateName, ' ')) s WHERE e.EmployeeName LIKE '%' || s.VALUE || '%' -- 过滤无效拆分片段,可根据实际需求调整 AND s.VALUE NOT IN ('-', '') ) ORDER BY c.CandidateName;
逻辑说明
- 拆分名称:用
SPLIT_TO_TABLE函数把CandidateName按空格拆分成多行,每个片段对应一行的VALUE字段。 - 匹配验证:通过
EXISTS子查询检查当前员工的EmployeeName是否包含任一有效拆分片段(这里过滤了-和空字符串,避免无意义的匹配)。 - 去重处理:用
DISTINCT确保同一个候选人不会因为多个匹配片段重复关联到同一条员工记录。
执行该SQL后,将得到期望的关联结果:
| CandidateName | StartDate |
|---|---|
| Muhammad Bilal | 2022-02-15 |
| Ali - Hasan Khan | 2022-03-17 |
| Tehseen Nawaz | 2022-01-10 |
内容的提问来源于stack exchange,提问作者Bilal Shafqat
相关产品推荐
相关产品推荐

