1. 描述 有时,在新建数据集过程中,可能会遇到这样的需求:将2个表进行数组字段的映射关联,形成一个最终表。一般情况下,可以直接通过表与表之间通过 JOIN 关联实现,但如果某个字段以数组存在时,JOIN 方法就不好处理了。 如图:表1、表2 实现效果:
2. 思路1)在 MySQL 数据库中通过 group_concat() 函数与 find_in_set() 函数结合实现。 2)在 SQL Server 数据库中通过 stuff() 函数与 charindex() 函数结合实现。 3)在Oracle数据库中通过wm_concat()函数与左连接结合实现 3. 示例(一)MySQL 版本:5.5.28 在 MySQL 中实现,SQL 脚本如下: select a.*, group_concat(lesson) as LESSONNAME from t2 a, t1 b where find_in_set(b.id, lessonid) group by name
4. 示例(二)SQL Server 版本及运行环境:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 在 SQL Server 中实现,SQL 脚本如下: ;with tb as ( select a.*, lesson as lessonname from t2 a, t1 b where charindex(','+b.id+',',','+lessonid+',')>0 ) select id,name,lessonid, [val]=stuff( (select ',' +[lessonname] from tb as kb where kb.id = ka.id for xml path('')),1,1,'') from tb as ka group by id,name,lessonid 5. 示例(三)Oracle版本:Oracle Database 11g Release 11.2.0.1.0 - Production 在Oracle中实现,SQL如下 select t2.id,t2.name,wm_concat(t1.lesson) from t2 left join t1 on ','||t2.lessonid||',' like '%,'||t1.id||',%' group by t2.id,t2.name order by id 注:上述实现方案仅供参考,实际情况可再此基础上进一步延伸。
|