请教高手一个SQL语句
表A
id userid typeid
1 01 01,02,03,
2 02 02,04,
表B
typeid name
01 老虎
02 狮子
03 大象
04 兔子
05 猴子
要得到
表C
userid typeid name
01 01 老虎
01 02 狮子
01 03 大象
02 02 狮子
02 04 兔子
先谢谢各位前辈了~!
------解决方案----------------------不用函数也可以做的
declare @t1 table(id int,userid varchar(10),typeid varchar(50))
declare @t2 table(typeid varchar(10),name varchar(20))
insert into @t1
select 1, '01 ', '01,02,03, '
union all select 2, '02 ', '02,04, '
insert into @t2
select '01 ', '老虎 '
union all select '02 ', '狮子 '
union all select '03 ', '大象 '
union all select '04 ', '兔子 '
union all select '05 ', '猴子 '
--要得到
--表C
--userid typeid name
--01 01 老虎
--01 02 狮子
--01 03 大象
--02 02 狮子
--02 04 兔子
select a.userid,b.typeid,b.name
from @t1 a left join @t2 b on charindex( ', '+b.typeid+ ', ', ', '+a.typeid+ ', ')> 0
order by a.userid,b.typeid
/*结果
userid typeid name
---------- ---------- --------------------
01 01 老虎
01 02 狮子
01 03 大象
02 02 狮子
02 04 兔子
*/
------解决方案-----------------------创建测试环境
Create Table A(id int,userid varchar(10),typeid varchar(10))
Insert A Select 1, '01 ', '01,02,03, '
Union All Select 2, '02 ', '02,04, '
Go
Create Table B(typeid varchar(10),name varchar(10))
Insert B Select '01 ', '老虎 '
Union All Select '02 ', '狮子 '
Union All Select '03 ', '大象 '
Union All Select '04 ', '兔子 '
Union All Select '05 ', '猴子 '
Go
---查询结果
Select
A.userid,
B.typeid,
B.name
From
A
Left Join B
On
Charindex( ', '+B.typeid+ ', ', ', '+A.typeid+ ', ')> 0
Order By A.userid,B.typeid
---清除测试环境
Drop Table A,B
---结果
/*
userid typeid name
---------- ---------- ----------
01 01 老虎
01 02 狮子
01 03 大象
02 02 狮子
02 04 兔子
(所影响的行数为 5 行)