两张表映射关联数组字段

我是社区第238588位番薯,欢迎点我头像关注我哦~
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

注:上述实现方案仅供参考,实际情况可再此基础上进一步延伸。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 1关注人数 6738浏览人数
最后回复于:2020-9-11 15:59

返回顶部 返回列表