数据库中 join 链接过滤重复的记录

原创 2011年01月14日 16:51:00

   今天开发数据库两张表p_zxts ,p_zxts_reply ,咨询问题,和咨询答复表(可以答复两次及两次以上),查询咨询问题列表同时查询是否已经答复的状态,一次性查出来

如果用左连接 有查询出重复的记录

 

下面介绍过滤重复记录两种方法:

 

1 、sql函数的方法

  select m.* from (select r.tid as id ,z.*,row_number()over(partition by z.tid order by sys_guid()) rn from p_zxts z left join p_zxts_reply r on z.tid=r.questionid )m where rn=1 order by m.datetime desc

 

2、利用group by的方法

 

select p.*,m.id from p_zxts p inner join(select z.tid,max(r.tid) as id from p_zxts z left join p_zxts_reply r on z.tid=r.questionid group by z.tid)m on p.tid=m.tid

 

第二种应该是比较常用一些

 

查询及删除数据库中的重复记录

 

有张表pepole ,字段有pepoleID  .name ,addree

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people   where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)  
 
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people    where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)   and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)  
 
3、查找表中多余的重复记录(多个字段)
select * from people a   where (a.peopleId,a.name) in  (select peopleId,name from vitae group by peopleId,name having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
 

delete from people a   where (a.peopleId,a.name) in  (select peopleId,namefrom vitae group by peopleId,namehaving count(*) > 1) and rowid not in (select min(rowid) from namegroup by peopleId,namehaving count(*)>1)  

HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

 

 

如果没有主键重复记录可以用

 

select distinct * from tableName

 

 

 

 

 

 

相关文章推荐

inner join 数据重复问题

 在查询数据时. 写了一段sql 很奇怪.查询前5个表的数据时,不会出现重复数据 直到关联第六个表时(T_IM_InventoryBalance ),重复数据很多。一时间很郁闷.随后咨询实施人员才知。...
  • qwnbc
  • qwnbc
  • 2009年11月10日 01:23
  • 5622

left join 右表多条数据重复

mysql的left join从两个表中联合查询数据,以左表为主,右表为辅。如果左表中有的内容右表中没有,则用null填充。这是一般的常见的解释。也很容易理解。但是在做右表的多数据查询的时候就得写条件...
  • educast
  • educast
  • 2012年06月19日 14:48
  • 25014

left join 后,左表怎样合并或者去掉重复记录

在使用left join 后会发现如果右表数量有重复的话,查询出来的数量大于左表的数量, 如 表一 test1     ID NAME SEX AG...

多重left join去重

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只 用它来返回不重复记录的条数,而不是用它来返回不重记录的...
  • mmdadi
  • mmdadi
  • 2016年11月30日 11:53
  • 2019

SQL Server 多表left join on 单列去重复问题

今儿打开项目发现,有一个数据展示有问题,然后就去查原因,发现是因为数据重复导致的,因为之前是用DISINTCT去重的,当时用的时候只知道DISTINCT可以去重,具体的也没深入的研究,今天才了解到,D...

LEFT JOIN 去除重复

A表 PrimaryKey     ForeignKey         AMoney 5                    53212                173250.0000 ...

SQL Server 多表left join on 单列去重复问题

今儿打开项目发现,有一个数据展示有问题,然后就去查原因,发现是因为数据重复导致的,因为之前是用DISINTCT去重的,当时用的时候只知道DISTINCT可以去重,具体的也没深入的研究,今天才了解到,D...

java获取桌面路径的代码

FileSystemView fsv = FileSystemView.getFileSystemView(); File com=fsv.getHomeDirectory();    //这便是读...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库中 join 链接过滤重复的记录
举报原因:
原因补充:

(最多只允许输入30个字)