如何用SQL查询拆分CSV字段并关联对应PK生成新表
嘿,这事儿好办!既然你已经有了能拆分CSV字符串的函数,咱们只需要把原表的每一行和拆分后得到的多个值做关联就行,不同数据库的写法略有差异,我给你列几个常见的实现方式:
假设你的原表名为OriginalTable,列是PK(主键)和[Values](CSV字符串列),拆分函数名为SplitCSV,返回包含单个列Value的表
1. SQL Server 写法
用CROSS APPLY来关联原表和拆分函数的结果:
SELECT ot.PK AS Id, sc.Value FROM OriginalTable ot CROSS APPLY SplitCSV(ot.[Values], ',') sc
CROSS APPLY会自动把原表的每一行,和拆分函数针对该行CSV字符串返回的所有行做匹配,完美生成你要的一对多关联结果。
2. PostgreSQL 写法
用LATERAL JOIN来实现关联(如果是自定义拆分函数):
SELECT ot.pk AS id, sc.value FROM original_table ot LATERAL JOIN split_csv(ot.values, ',') sc(value)
如果不想用自定义函数,PostgreSQL内置的unnest+string_to_array也能直接搞定:
SELECT ot.pk AS id, unnest(string_to_array(ot.values, ',')) AS value FROM original_table ot
3. MySQL 8.0+ 写法
用LATERAL JOIN关联自定义拆分函数:
SELECT ot.PK AS Id, sf.Value FROM OriginalTable ot JOIN LATERAL SplitCSV(ot.`Values`, ',') sf
注意事项
- 如果你的拆分函数返回的列名不是
Value,记得把SQL里的sc.Value/sf.Value改成对应的列名 - 因为
Values是SQL关键字,所以引用这个列的时候要加方括号(SQL Server)、反引号(MySQL)或者双引号(PostgreSQL,需开启对应配置)来转义
内容的提问来源于stack exchange,提问作者s7h
相关产品推荐
相关产品推荐

