数据库中 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
  • 6033

LEFT JOIN 去除重复

A表 PrimaryKey     ForeignKey         AMoney 5                    53212                173250.0000 ...
  • andycode
  • andycode
  • 2011年08月16日 17:02
  • 4126

Mysql 解决left join 数据重复的问题

http://www.cnblogs.com/jackluo/p/3475498.html select p.*,g.roleName,pg.srcType from t_gold_...
  • A9925
  • A9925
  • 2017年03月08日 19:53
  • 1498

【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题

下面的语句,运行后会出来几条记录呢?     select* from ( select 1 as id )a left join ( select 1 as id union all s...
  • yupeigu
  • yupeigu
  • 2013年04月25日 20:19
  • 1902

mysql中:单表distinct、多表group by查询去除重复记录

单表的唯一查询用:distinct多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然m...
  • besily
  • besily
  • 2010年03月30日 15:45
  • 17175

SQL 重复与不重复记录

1.如何用SQL语句把一个表里面某字段内有相同的记录查询出来 现在有一个表 有三列 分别是tel,name,addr 我现在要查询name一样的  具体T-SQL语句要怎么写 求助 就是nam...
  • adu285041555
  • adu285041555
  • 2013年03月13日 21:22
  • 4064

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

在使用left join 后会发现如果右表数量有重复的话,查询出来的数量大于左表的数量, 如 表一 test1     ID NAME SEX AG...
  • txqd1989
  • txqd1989
  • 2016年12月20日 11:17
  • 5709

去除Collection中重复元素

如果某个Collection(list) 包含重复元素,要去掉collection中的重复元素,无需任何算法只需简单构造Set对象,因为Set不允许重复元素//包含重复元素的集合Collection ...
  • pbnow
  • pbnow
  • 2006年08月29日 09:46
  • 2480

SQL in 与inner join查询结果的区别

in和inner join在大多数情况下都是返回两表的交集,但是两者还是有区别的,如下例子 mysql> select * from a; +------+------+ | id   | na...
  • du_qi
  • du_qi
  • 2016年05月03日 16:06
  • 3240

SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解

相信很多人在刚开始使用数据库的INNER JOIN、LEFT JOIN和RIGHT JOIN时,都不太能明确区分和正确使用这三种JOIN操作,本文通过一个简单的例子通俗易懂的讲解这三者的区别,希望对大...
  • wangyuchun_799
  • wangyuchun_799
  • 2015年10月13日 14:12
  • 8885
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库中 join 链接过滤重复的记录
举报原因:
原因补充:

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