1 查询重复的数据
单列+单列显示: 如果需要查询 A 列 重复的数据
select A列 from tablename group by A列 having count(*)>1
组合列+组合列显示 : 比如 A列 和B 列 组合确定一条数据 ,比如计划中的某一个资产
select A列,B列 from tablename group by A列,B列 having count(*)>1
单列筛选+全部显示
select * from tablename where A列 in( select A 列 from tablename having count(*)>1)
组合列筛选+全部显示
select * from tablename where (A列,B列) in (select A列,B列 from tablename group by A列,B列 having count(*)>1)
//这样写不知道对不对
2 删除重复的数据
1 删除重复的数据,只保留最大的数据
delete from tablename where A列 not in (select max(A列) from tablename group by A列 having count(*) >1)
//做分组的时候最好能够利用条件进行where 筛选之后分组
select A列 from tablename where B列='xxx' group by A列 having count(*)>1
3 提高查询的效率
在进行表的连接的时候,使用虚拟表进行连接的时候不要使用*,尽量列出来需要使用的列
不好的sql
select b.*,t1.* from b left join (select * from c ) t1 on b.id=t1.mainid
优化后的sql
select b.name,b.id from b left join (select mainid,lastname from c )t1 on b.id=t1.mainid
2 EXISTS 的效率要比 in 的 高