MySQL 多个ID转成名称_一列保存多个ID(将多个用逗号隔开的ID转换成用逗号隔开的名称)...

在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID

背景:在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID。如,当一个员工从属多个部门时、当一个项目从属多个城市时、当一个设备从属多个项目时,很多人都会在员工表中加入一个deptIds VARCHAR(1000)列(本文以员工从属多个部门为例),用以保存部门编号列表(很明显这不符合第一范式,但很多人这样设计了,在这篇文章中我们暂不讨论在这种应用场景下,如此设计的对与错,有兴趣的可以在回复中聊聊),然后我们在查询列表中需要看到这个员工从属哪些部门。

初始化数据:

部门表、员工表数据:

代码如下:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]'))

DROP TABLE [dbo].Department

GO

--部门表

CREATE TABLE Department

(

id int,

name nvarchar(50)

)

INSERT INTO Department(id,name)

SELECT 1,'人事部'

UNION

SELECT 2,'工程部'

UNION

SELECT 3,'管理部'

SELECT * FROM Department

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]'))

DROP TABLE [dbo].Employee

GO

--员工表

CREATE TABLE Employee

(

id int,

name nvarchar(20),

deptIds varchar(1000)

)

INSERT INTO Employee(id,name,deptIds)

SELECT 1,'蒋大华','1,2,3'

UNION

SELECT 2,'小明',&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值