1、必须保证表中有主键或者唯一索引,或者某列数据不能重复。只有这样,才可能使用一句SQL来实现。否则只能考虑其它办法。下面的语句,假定BB列是不重复的,删除后保存BB列值最大的那条记丛慧录。
delete from 表
where aa in (select aa from 表 group by aa having count(aa) > 1) and
bb not in (select max(bb) from 表 group by aa having count(aa) > 1);
2、腊悔有多种写法:
delete A from B where A.AA = B.AA
delete A from A,B where A.AA = B.AA
delete A where AA in (select AA from B)
3、使用into关键字:
select * into 新表名 from 原表渗局答
4、取数据前3位,字段必须是类似char类型,使用类似substring这样的函数(SYBASE是substring,ORACLE是substr):
select substring(字段,1,3) from 表名
方法很多,介绍一种如液凯下。
例如:数据库zkhr里,有表tab,字段有id,xm,内容分别是两个1,张三;两个2,李四,处理步骤如下:
第一步:backup database zkhr to disk='d:\zkhr20160425'[把数据库先备份一份,预防后凯乎继编辑操作时出问题]
第二步:使用select distinct id,xm into lsb_tab from tab[lsb_tab是临时表,盯埋悉使用distinct就是只同样的数据只抽取一行,这样lsb_tab里的数据就是你要的内容];
第三步:truncate table tab[把原表里的数据清空]
第四步:insert tab(id,xm) select id,xm from lsb_tab[把临时表里的数据插回原表]
第五步:truncate table lsb_tab[删除临时表]
--group 中铅瞎的蠢坦字段是重复的字段带激桐名称
delete tableName
where tableID in (
select tableID
from (select tableID,num=count(*)
from tableName
group by 字段1,字段2,tableID) as xx where xx.num>1)