比如说 大量的userid, 现在需要找到错误一个或者多个,错误的userid是指根本不存在的。
比如
480168528
112457891
253022876
309738752
690627818
333333333
“333333333” 就是错误的userid, 我是用
select userid, count(userid) as number from user where userid in (@userid) group by userid
这样只显示:
useid number
480168528 2
112457891 2
253022876 1
309738752 3
690627818 4
但3333333就被忽略掉了,怎样可以显示, 或者直接提示某些ID不存在呢
useid number
480168528 2
112457891 2
253022876 1
309738752 3
690627818 4
333333333 0
not in 不就行了
Not in 的话,会把其他不在@userid都拿进去吧
@sdnd2000: 你要是检查@userid参数中的哪些userid不在表中吧
如果是这样的话,你把参数@userid中的多的userid转化成一个临时表。
用这个临时表左连接user表 查看没有连接到的ID就行了
@Albert Fei:
怎么转换啦,怎么分割
@sdnd2000: create function func_splitstring
(@str nvarchar(max),@split varchar(10))
returns @t Table (c1 varchar(100))
as
begin
declare @i int
declare @s int
set @i=1
set @s=1
while(@i>0)
begin
set @i=charindex(@split,@str,@s)
if(@i>0)
begin
insert @t(c1) values(substring(@str,@s,@i-@s))
end
else begin
insert @t(c1) values(substring(@str,@s,len(@str)-@s+1))
end
set @s = @i + 1
end
return
end
@Albert Fei:
试过了,left join后@userid 里的还是会都在里面呀
@sdnd2000: 你把userid生成的那个表放left join 后面
@userid如果是一个userid字符串,则先拆分成一个表,然后。。。。然后你就知道怎么做了。