首页 新闻 搜索 专区 学院

SQL in 的问题

0
悬赏园豆:5 [待解决问题]

select ServiceStaff,* from Project_Hdr
order by Id desc

得到数据如图

ServiceStaff 的数据 中间有个逗号隔开如(XM4035,XM4032

使用IN的子查询 查询另一张表 

select * from Staff
where StaffNo in (select ServiceStaff from Project_Hdr)

用逗号分开的无法查询

求sql如何写

 

yellowshorts的主页 yellowshorts | 初学一级 | 园豆:162
提问于:2012-12-10 16:12
< >
分享
所有回答(5)
0

你的描述太乱,理解不了,讲得清楚一点

用逗号分开的无法查询,是语法错误,还是查出的数据不对

Rich.T | 园豆:3440 (老鸟四级) | 2012-12-10 16:20

上面的语句会得到这样的结果

select * from staff

where staffno in (XM4035,XM4032) 

这样会报错

要变成这样子

select * from staff

where staffno in ('XM4035','XM4032')

就是如何用sql 将   XM4035,XM4032 变成 'XM4035','XM4032

 多了引号 并且用逗号分开的不止2个 有个能好几个

支持(0) 反对(0) yellowshorts | 园豆:162 (初学一级) | 2012-12-10 16:25

@yellowshorts: 

你这个一条SQL已经解决不了,需要写过程,然后建一下分割函数

declare @str varchar(max)

set @str=''

select @str= ServiceStaff+','+@str from Project_Hdr

if len(@str)<>0 set @str=substring(@str,1,len(@str)-1)

select * from Staff where StaffNo in (select col from dbo.f_splitStr(@str,','))

支持(0) 反对(0) Rich.T | 园豆:3440 (老鸟四级) | 2012-12-10 16:54
0

创建个分隔字符串的函数

create function f_splitStr(
@s varchar(8000), --待分拆的字符串,如'1,11,21,31'
@split varchar(10) --分隔符,如','
)returns @re table(col varchar(50))
as
begin
while charindex(@split,@s)>0
begin
insert @re values(left(@s,charindex(@split,@s)-1))
set @s=stuff(@s,1,charindex(@split,@s),'')
end
insert @re values(@s)
return
end

语句改为

select * from Staff 
where StaffNo in (select dbo.f_splitStr(ServiceStaff,',') from Project_Hdr)

还有种方法是使用SQL对XML的处理,楼主先看看上面的可以不

acepro | 园豆:1218 (小虾三级) | 2012-12-10 16:44
0

select * from Staff
where [StaffNo] in (select [ServiceStaff] from Project_Hdr)

jingjunfeng | 园豆:873 (小虾三级) | 2012-12-10 17:43
0

用 like 也可以吧,表结构不应该设计成这样。

geass.. | 园豆:1777 (小虾三级) | 2012-12-10 18:06
0

要么写存储过程,要么放在代码里实现,没必要纠结在sql查询语句里面去实现

茂茂 | 园豆:2860 (老鸟四级) | 2012-12-11 10:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册