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

来源:互联网 时间:1970-01-01

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

初始化数据:

部门表、员工表数据:

View Code
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]'))DROP TABLE [dbo].DepartmentGO--部门表CREATE TABLE Department( id int, name nvarchar(50))INSERT INTO Department(id,name)SELECT 1,'人事部'UNION SELECT 2,'工程部'UNION SELECT 3,'管理部'SELECT * FROM DepartmentIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]'))DROP TABLE [dbo].EmployeeGO--员工表CREATE TABLE Employee( id int, name nvarchar(20), deptIds varchar(1000))INSERT INTO Employee(id,name,deptIds)SELECT 1,'蒋大华','1,2,3'UNIONSELECT 2,'小明','1'UNION SELECT 3,'小华',''SELECT * FROM Employee


相关阅读:
Top