首页 新闻 会员 周边

如何在多个数据用SQL查找出错误的数据

0
悬赏园豆:5 [已解决问题] 解决于 2013-08-18 18:59

比如说 大量的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

sdnd2000的主页 sdnd2000 | 初学一级 | 园豆:189
提问于:2013-08-16 23:50
< >
分享
最佳答案
0

not in 不就行了

收获园豆:5
Albert Fei | 老鸟四级 |园豆:2102 | 2013-08-17 21:37

Not in 的话,会把其他不在@userid都拿进去吧

sdnd2000 | 园豆:189 (初学一级) | 2013-08-17 21:44

@sdnd2000: 你要是检查@userid参数中的哪些userid不在表中吧

如果是这样的话,你把参数@userid中的多的userid转化成一个临时表。

用这个临时表左连接user表 查看没有连接到的ID就行了

Albert Fei | 园豆:2102 (老鸟四级) | 2013-08-17 21:57

@Albert Fei: 

怎么转换啦,怎么分割

sdnd2000 | 园豆:189 (初学一级) | 2013-08-18 16:51

@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 | 园豆:2102 (老鸟四级) | 2013-08-18 18:27

@Albert Fei: 

试过了,left join后@userid 里的还是会都在里面呀

sdnd2000 | 园豆:189 (初学一级) | 2013-08-18 19:41

@sdnd2000: 你把userid生成的那个表放left join 后面

Albert Fei | 园豆:2102 (老鸟四级) | 2013-08-18 20:32
其他回答(1)
0

@userid如果是一个userid字符串,则先拆分成一个表,然后。。。。然后你就知道怎么做了。

清海扬波 | 园豆:825 (小虾三级) | 2013-08-17 09:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册