日期:2014-05-17  浏览次数:20831 次

过滤表重复数据的问题
假如有个表A,有name,id,age三列,我想要找出name,id,age3个都不重复的数据,如
name      id    age 
zhangsan  1     18
zhangsan  2     19
lisi      2     30
wanwu     3     18
zhaoliu   4     21
过滤的结果是得到最后条数据,sql如何实现?


追问:如果表的列有很多,又改如此处理
SQL 重复

------解决方案--------------------

第一种方式:
select distinct x, y from t;

第二种方式:
select x,y from t group by x,y

推荐第二种方式

------解决方案--------------------
你的意思可以理解为两种,意思一:
检索出表中所有结果,以三者为关键字,不允许有重复的

select distinct name,id,age from t;
select name,id,age from 
(select name,id,age,count(1) from t group by name,id,age);

意思二:
检索出表中的所有结果,如果有三者都相同的,就不检索出来
select name,id,age from 
(select name,id,age,count(1) from t group by name,id,age 
   having count(1) < 2);


------解决方案--------------------
我的方法比较笨,但一定能实现结果。
依据三个列建立三张临时表,分别保存区中后的数据。然后再和表a进行关联,用四个表之间的内连接的方式。