sql 字符列比较,表连接问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 14:01:48
数据库是sql2000

有两张表
T1(id(int),name(varchar(100))),
T2(id(int),idstr(varchar(100)))

表中内容T1
id name
1 chn
2 usa
3 eng

T2表中内容
id idstr
1 2,3
2 1,2,3

现在,要将T1和T2连接起来,结果如下:
idstr name
2,3 usa eng
1,2,3 chn usa eng

请问sql语句怎么实现?
我尝试过
select T2.idstr,T1.name from T2
left join T1
on t1.id in (t2.idstr)不对

select T2.idstr,T1.name from T2
left join T1
on t1.id like t2.idstr 也不对
谢谢一楼,如果用函数或者存储过程是可以实现,只是我觉得太麻烦想找一个更简单点的方法,现在我修改了一下语句,可以一条一条的查询出来,还是没有办法把idstr中所关联到的name连接起来作为一个字段显示出来,现我的语句如下:
select T2.idstr,T1.name from T2
left join T1
on T2.idstr like '%'+cast(T1.id as varchar(100))+'%'
这样可以得到5条记录,而不是我所希望的三条,不知哪位大侠还有更简便的方法?

按照你的要求来说,是没有办法简单用join来完成的
因为列选择T1.name这个射影操作就限制了,
不管怎么交叉,你只可能在一行里面选出一个name值
没法将两个name放到一条记录里面去

我觉得只能用游标。
首先循环T2,找出里面的没一个idstr,并用string函数将其中的每个id
给取出来。
然后,用其中的id去T1表中找到相对应的name。
再将这些name用string函数拼成一个string值。

个人建议。

要真的达到你的要求比较难,建议你先写一个存储过程来完成将“1,2,3”转化为“1”,“2”,“3”,这样会更加方便点。或者你运用一下临时表