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如何写
你的描述太乱,理解不了,讲得清楚一点
用逗号分开的无法查询,是语法错误,还是查出的数据不对
上面的语句会得到这样的结果
select * from staff
where staffno in (XM4035,XM4032)
这样会报错
要变成这样子
select * from staff
where staffno in ('XM4035','XM4032')
就是如何用sql 将 XM4035,XM4032 变成 'XM4035','XM4032'
多了引号 并且用逗号分开的不止2个 有个能好几个
@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,','))
创建个分隔字符串的函数
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的处理,楼主先看看上面的可以不
select * from Staff
where [StaffNo] in (select [ServiceStaff] from Project_Hdr)
用 like 也可以吧,表结构不应该设计成这样。
要么写存储过程,要么放在代码里实现,没必要纠结在sql查询语句里面去实现