注册 登录
编程论坛 ASP技术论坛

关于distinct的使用

guang2356447 发布于 2007-10-22 22:55, 932 次点击
需求是:我要消除user字段值重复的记录,同时又要得到sex,age,work3个字段的值

select distinct user from t1 能消除重复记录,但只能取一个字段,我现在要同时取sex,age,work这3个字段的值该如何写。

select distinct user,sex,age,work可以取多个字段,但只能消除这4个字段值全部相同的记录

7 回复
#2
kucap12007-10-23 09:10
顶了!支持啊!路过了!
#3
kucap12007-10-23 09:12
学习了!顶了!支持啊!!
#4
madpbpl2007-10-23 16:40
distinct要求比较严格,这种情况最好用group by来写,work是数据库保留字,最好别用这个命名字段
<!--#include file="conn.asp"-->
<%
Set rs=Server.CreateObject("adodb.recordset")
sql ="select user,min(sex) as sex,min(age) as age,min(work) as [work] from t1 group by user"
rs.open sql,conn,1,1
%>
<%
do while not rs.eof
%>
<%//=rs("id")%>&nbsp;
<%=rs("user")%>&nbsp;
<%=rs("sex")%>&nbsp;
<%=rs("age")%>&nbsp;
<%=rs("work")%>&nbsp;<br>
<%
rs.movenext
loop
%>
#5
guang23564472007-10-23 19:34
madpbpl
感谢madpbpl


#6
caor19872007-10-24 15:27
select * from t1 a where not exists (select 1 from t1 where user=a.user and id>a.id)
这样应该也可以。
#7
威龙嘉少2007-10-24 18:36
不太明白四楼的SQL语句的意思,能解释下吗?
#8
madpbpl2007-10-24 19:01
以下是引用威龙嘉少在2007-10-24 18:36:53的发言:
不太明白四楼的SQL语句的意思,能解释下吗?

主要是sql语句的写法

我们想显示sex、age、work这三个字段的值,但又要对应不同的user(用户),如果使用distinct,只能写成
sql ="select distinct user from t1"
因为对于distinct来说要求比较严格,只能返回一个字段,所以对于多个字段来说不适用。
所以这里采用了group by的方法。

但是如果写成下面这样是不行的
sql ="select user,sex,age,[work] from t1 group by user"
只能写成
sql ="select user,sex,age,[work] from t1 group by user,sex,age,[work]"
这样只有两条记录里的user、sex、age、work全都相等时才被判断为重复记录的
为了避免这种情况,所以采用了以下的写法
sql ="select user,min(sex) as sex,min(age) as age,min(work) as [work] from t1 group by user"



1