我建议用先查询出来如'12,13'然后将他们分割成数组或者集合
然后在通过集合中的数据再查询科室
查询的时候可以使用 in 操作.
建议在程序里作处理,先读取出 '12,13' ,然后使用 select name from tb where id in(12,13) 来获取科室信息,不过这个科室信息获取之后是一条条的记录,你需要再将科室名字连接起来才能得到你想要的结果
如果要在数据库中做处理,试试下面的存储过程:
create procedure forQ3773
@aid int
as
begin
--下面四行用于根据aid获取idlist并放到表变量@tb中
declare @idlist varchar(2000)
declare @tb table(bname varchar(2000))
select @idlist = idlist from a where aid = @aid
insert into @tb exec('select bname from b where bid in(' + @idlist + ')')
--下面三行用于连接得到的列表,如果不需要连接就不用了
declare @s varchar(2000)
set @s = ''
select @s = @s + cast(bname as varchar) + ',' from @tb
--上面拼字符串时最后多一个逗号,这里去掉并作为结果返回
select left(@s,len(@s)-1)
end
=============================
里面用到了两个表:a(aid,idlist) 和 b(bid,bname),a.idlist是存放你那个'12,13'的,b.bid是对应的id,b.bname是对应的科室名字,测试数据如下:
insert into a(aid,idlist) values(1,'1,2')
insert into a(aid,idlist) values(2,'2,3')
insert into a(aid,idlist) values(3,'1,2,3')
insert into b(bid,bname) values(1,'科室1')
insert into b(bid,bname) values(2,'科室2')
insert into b(bid,bname) values(3,'科室3')
测试结果:
execute forQ3773 @aid=1 --科室1,科室2
execute forQ3773 @aid=2 --科室2,科室3
execute forQ3773 @aid=3 --科室1,科室2,科室3
还是在程序里面处理比较好吧
数据库尽量不要这样设计。数据库表的每一列都应该是“原子”的。
以前就碰到过一个这样的问题,看到丁学的好象是另一种思路,去试试
你查询科室的名字,SQL的Where条件用In(也就是你用逗号隔开的ID) 就可以了,