liqiang665

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  27 Posts :: 0 Stories :: 14 Comments :: 3 Trackbacks

公告

2008年7月9日 #

SQL子查询二则

1.查找唯一值

实现原理为:先取不与我相同的标识号的内容,而我的内容又不存在这些内容中,所以我的内容是唯一的.即即唯一值

例子:在一个用户表中取出唯一组的用户

if object_id('Test_Users') is not null
drop table Test_Users
go

create table Test_Users(AutoID int identity(1,1) primary key,UserGroupID int,UserName varchar(50))
go
set xact_abort on
begin tran
insert into Test_Users(UserGroupID,UserName)
select 2,'aa' union
select 2,'bb' union
select 3,'cc' union
select 1,'Admin' union
select 3,'ff' union
select 2,'pp'
commit tran
go

select * from Test_Users a
where UserGroupID not in
(select UserGroupID from Test_Users where AutoID<>a.AutoID)

---这样找出的结果是

AutoID      UserGroupID UserName                                          
----------- ----------- --------------------------------------------------
1           1           Admin

(所影响的行数为 1 行)


2.查找结果不重复

实现原理为:重复数据字段选择一个最大值或者最小值.而选择的时候指向这个值.其实这是把重复字段部分分成了组.但分组计算不能取所有数据.
--仍然用以上数据
--这是取最大值
select * from Test_Users a
where AutoID>=
(select max(AutoID) from Test_Users b where a.UserGroupID=b.UserGroupID)

--这是取最小值
select * from Test_Users a
where AutoID>=
(select max(AutoID) from Test_Users b where a.UserGroupID=b.UserGroupID)

--也可以用分组计算
select UserGroupID from Test_Users
group by UserGroupID

posted @ 2008-07-09 14:37 青铜时代 阅读(818) 评论(0) 编辑