如题:在数据库A表中PersonID保存的值为 以逗号分隔开
02aad913-56ea-46e4-93f7-1, 79e78b2c-c218-44f1-bc5b-1, e37ce5dc-aa02-455d-8db1-c
保存用户信息表 (B)数据如下:
PersonnelId PersonnelName
02aad913-56ea-46e4-93f7-1 仲玲
79e78b2c-c218-44f1-bc5b-1 王晏平
e37ce5dc-aa02-455d-8db1-c 许文亮
请问咱用SQL 将A和B表关联查询出来实现效果如下:
02aad913-56ea-46e4-93f7-1, 79e78b2c-c218-44f1-bc5b-1, e37ce5dc-aa02-455d-8db1-c
转换成
仲玲,王晏平,许文亮
------解决思路----------------------
SELECTSQL2005+有效
STUFF((
SELECT ','+PersonnelName FROM B
WHERE A.PersonID LIKE '%'+B.PersonnelId+'%'
FOR XML PATH('')
),1,1,'')PersonName
FROM A
------解决思路----------------------
DECLARE @a TABLE(personID VARCHAR(2000))
DECLARE @b TABLE(personID VARCHAR(2000),PersonnelName VARCHAR(8))
INSERT INTO @a
( personID )
VALUES ( '02aad913-56ea-46e4-93f7-1, 79e78b2c-c218-44f1-bc5b-1, e37ce5dc-aa02-455d-8db1-c' -- personID - varchar(2000)
)
INSERT INTO @b
( personID, PersonnelName )
SELECT '02aad913-56ea-46e4-93f7-1','仲玲' UNION ALL SELECT
'79e78b2c-c218-44f1-bc5b-1', '王晏平' UNION ALL SELECT
'e37ce5dc-aa02-455d-8db1-c', '许文亮'
SELECT STUFF((SELECT ','+PersonnelName FROM @b t1
WHERE EXISTS(SELECT 1 FROM @a t2 WHERE CHARINDEX(t1.personID,t2.personID)>0)
FOR XML PATH('')),1,1,'')
------解决思路----------------------
declare @t table (PersonnelId nvarchar(40),PersonnelName nvarchar(20) )
insert into @t values(
'02aad913-56ea-46e4-93f7-1','仲玲'),
('79e78b2c-c218-44f1-bc5b-1','王晏平'),
('e37ce5dc-aa02-455d-8db1-c','许文亮')
declare @para nvarchar(max) = '02aad913-56ea-46e4-93f7-1,79e78b2c-c218-44f1-bc5b-1,e37ce5dc-aa02-455d-8db1-c'
declare @x xml = '<id>' + REPLACE(@para,',','</id><id>') + '</id>'
select @para = REPLACE(@para,tt.PersonnelId, tt.PersonnelName) from (
select T.d.value('.','varchar(100)') as value from @x.nodes('/*') as T(D)
) aa join @t tt on aa.value=tt.PersonnelId
select @para
------解决思路----------------------
CHARINDEX和EXISTS 配合也ok
create table users (PersonnelId nvarchar(40),PersonnelName nvarchar(20) )
insert into users values
(N'02aad913-56ea-46e4-93f7-1',N'仲玲'),
(N'79e78b2c-c218-44f1-bc5b-1',N'王晏平'),
(N'e37ce5dc-aa02-455d-8db1-c',N'许文亮');
create table IDs(personID VARCHAR(2000))
INSERT INTO IDs
( personID )
VALUES ( '02aad913-56ea-46e4-93f7-1, 79e78b2c-c218-44f1-bc5b-1, e37ce5dc-aa02-455d-8db1-c')
declare @names nvarchar(max)
select @names=isnull(@names+',','')+PersonnelName from users u where exists(select * from IDs where CHARINDEX(u.PersonnelId,personID)>0)
select @names as names
/*
names
---------
仲玲,王晏平,许文亮
*/