今天开发数据库两张表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)来判断
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)
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
如果没有主键重复记录可以用
select distinct * from tableName