首页 新闻 会员 周边

SQL 如何实现一个表中多行数据 与多行数据的比较

1
悬赏园豆:60 [已解决问题] 解决于 2012-02-08 14:29

表 Test  主键为(Userid 、 Pindex )
Userid Pindex ChkAdd ChkEdit ChkDelete 
User1   1       1        0      1
User1   2       1        1      1
User1   3       1        1      1
User2   1       1        0      1
User2   2       1        1      1
User2   5       1        0      1
User2   6       1        1      1
User3   1       1        0      1
User3   6       1        1      1
User4   1       1        0      1
User4   6       1        1      1
........
效果1:User1 和User2,User3...的後面的數據比较是否相同(包括行數是否相同和後面对应的字段的值是否相同),如果相同return 1 否则  return 0


效果2:User1 和User2,User3...的後面的數據比较是否相同(包括行數是否相同和後面对应的字段的值是否相同),如果相同: 如上表中的User4 与User3 重复,在Test表中將Userid = User4 的數據刪除掉
如果不同:則不做操作

依次把User1 ,User2,User3 遍历一遍


 

maanshancss的主页 maanshancss | 菜鸟二级 | 园豆:303
提问于:2012-02-07 17:40
< >
分享
最佳答案
1

效果1:

 1 create procedure usersameas
2 @userid varchar(10)
3 as
4 if exists
5 (select f.userid
6 from test f
7 where not exists (
8 select pindex, chkadd, chkedit, chkdelete
9 from test
10 where userid = f.userid or userid = @userid
11 group by pindex, chkadd, chkedit, chkdelete
12 having count(*) = 1)) select 1 else select 0
13
14 usersameas 'User1' --返回0
15
16 usersameas 'User3' --返回1

效果2: 不必这么麻烦一条语句就可以了。

 1 delete test
2 where userid in(
3 select g.userid
4 from test g
5 where exists (
6 select f.userid
7 from test f
8 where f.userid < g.userid and not exists (
9 select pindex, chkadd, chkedit, chkdelete
10 from test
11 where userid = f.userid or userid = g.userid
12 group by pindex, chkadd, chkedit, chkdelete
13 having count(*) = 1)))
收获园豆:60
ChatinCode | 老鸟四级 |园豆:2272 | 2012-02-08 10:31

非常感谢,我自己苦弄半天,写的是一个一个对比的,比较烦,很费时间

maanshancss | 园豆:303 (菜鸟二级) | 2012-02-08 14:28

@maanshancss: 哈哈,我也是灵光一闪。平时可能写不出这个语句的。也不知道效率怎么样

ChatinCode | 园豆:2272 (老鸟四级) | 2012-02-08 16:05
其他回答(2)
1

不是很理解你的比较是什么意思?希望你能够列一个效果表出来

小小刀 | 园豆:1991 (小虾三级) | 2012-02-07 19:48

效果表1: 0

效果表2:

User1   1       1        0      1
User1   2       1        1      1
User1   3       1        1      1
User2   1       1        0      1
User2   2       1        1      1
User2   5       1        0      1
User2   6       1        1      1
User3   1       1        0      1
User3   6       1        1      1
........

--(User4 刪掉)

支持(0) 反对(0) maanshancss | 园豆:303 (菜鸟二级) | 2012-02-08 08:01
1

需要用数据库比较工具才可以,前些日子,有人发过类似的博客,而且还是首页里,你找找看吧。

通用C#系统架构 | 园豆:704 (小虾三级) | 2012-02-08 00:01

用Red Gate的话就只能一个用户一个用户的比较,还需要设定一些东西,数据多比较繁琐

不过在找比较数据的时候用Red Gate 比较好一些,颜色区分很明显,谢谢

支持(0) 反对(0) maanshancss | 园豆:303 (菜鸟二级) | 2012-02-08 14:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册