如何编写SQL查询将表值函数拆分结果与对应ID关联输出?
解决方案:关联表值函数拆分字符串并匹配ID
这是一个非常典型的字符串拆分后与原表主键关联的需求,利用你现有的SPLIT表值函数,结合数据库的关联查询语法就能轻松实现,不同数据库的写法略有差异,下面分情况说明:
适用于SQL Server的写法
使用CROSS APPLY关键字,它可以让主表的每一行数据与表值函数返回的结果集进行关联:
SELECT t.ID, s.COMPONENT FROM TEST t CROSS APPLY SPLIT(t.CONTENT) s;
适用于PostgreSQL、Oracle等支持ANSI标准的数据库
使用LATERAL JOIN(部分数据库也可写为JOIN LATERAL),作用和CROSS APPLY一致:
SELECT t.ID, s.COMPONENT FROM TEST t LATERAL JOIN SPLIT(t.CONTENT) s;
原理说明
- 对于
TEST表中的每一行数据,SPLIT(t.CONTENT)会把当前行的CONTENT字段拆分成对应的多行子字符串结果 CROSS APPLY/LATERAL JOIN会将原行的ID与拆分后的每一行COMPONENT进行配对,最终生成每个ID对应其CONTENT拆分后所有子字符串的结果集
执行上述查询后,返回的结果完全符合你的期望:
ID | COMPONENT
1 | "abc"
1 | "def"
1 | "ghi"
2 | "jkl"
2 | "mno"
2 | "pqr"
内容的提问来源于stack exchange,提问作者Alexander Sokol
相关产品推荐
相关产品推荐

