sql去除一列重复数据

sql去除一列重复数据

问:SQL删除重复列
  1. 答:共享下我所知道的..
    1.如果要查找重复的列(具体步骤我就不说了,看sql语句你应该可以明白过程)
    select
    *
    from
    表名
    where
    重复的字段名in
    (SELECT
    重复的字段名
    FROM
    表名
    group
    by
    重复的字段名
    having
    count(1)>1)
    2.删除重复的列保留最早插入的那个(使用这种方法必须要有标示字段,你的好像没有)...
    DELETE
    FROM
    表名
    WHERE
    重复的字段名
    in
    (SELECT
    重复的字段名
    FROM
    表名
    group
    by
    重复的字段名
    having
    count(1)>1)
    and
    你表中的第一个字段
    not
    in
    (select
    min(你表中的第一个字段)
    from
    表名
    group
    by
    重复的字段名
    having
    count(1)>1)
    最后要告诉你的是:看仔细了:
    上面的删除方法是不能删除你所要删除的那列,因为你表中的数据没有唯一的标示,建议你从新建张表,设一个自增长字段..这样这张表就不会出现你所遇到的问题了.
问:sql中如何删除一个表中重复的记录?
  1. 答:create view a_dist_view as
    select a.*, row_number() over(order by id, name) rn from a_dist as a
    delete from a_dist_view where rn <> 1
  2. 答:如果记录完全相同才算重复记录,那么: (sql server2000下测试通过)
    select distinct * into #tmpp from tid
    delete from tid
    insert into tid select * from #tmpp
    drop table #tmpp
    如果有id主键(数字,自增1的那种),那么:(sql server2000下测试通过)
    delete from tableA where id not in
    (select id = min(id) from tableA group by name)
  3. 答:可以给你个想法,把不重复的多出来放到一个临时表中,删除原表,再将临时表的数据插入原表
  4. 答:sql中删除一个表中的重复记录可以采用如下步骤: 
    1、把a_dist表的记录用distinct去重,结果放到临时表中。
    select  distinct * into #temp from a_dist;
    2、把a_dist表的记录全部删除。
    delete  from a_dist;
    3、把临时表中的数据信息导进到a_dist表中,并删除临时表。
    insert  into a_dist select * from #temp;
    drop table #temp;
    扩展资料:
    SQL (结构化查询语言)是用于执行查询的语法。在数据库上执行的大部分工作都由 SQL 语句完成。SQL 语言包含用于更新、插入和删除记录的语法。
    增删改查指令构成了 SQL 的 DML 部分:
    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT INTO - 向数据库表中插入数据
  5. 答:全删吗?
    delete from a_dist where id in(select id from a_dist group by id,name having count(*)<>1)
  6. 答: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 表名
  7. 答:delete 表 a wher rowid <>(max(rowid) from 表 b
    where a.重复项=b.重复项 );
  8. 答:先删后加
    delete from a_dist where id ='1' and name= 'abc' 执行删掉所有这样的记录,然后把数据记录下来在添加一次
    insert into a_dist values(1,'abc');
问:SQL怎么去除某一列的重复项
  1. 答:假设存在一个主键ID,Name为重复列
    --下面这句可以查出所有的没有重复的数据
    select
    *
    from

    as
    a
    where
    ID=(select
    min(ID)
    from

    where
    Name=a.Name)
    --根据上面这句就可以删除所有重复项的数据
    delete
    from

    where
    ID
    not
    in(
    select ID
    from

    as
    a
    where
    ID=(select
    min(ID)
    from

    where
    Name=a.Name)
    )
    好了~
  2. 答:select
    *
    (select
    row_number()
    over
    (partition
    by
    column1
    order
    by
    column2
    asc)
    as
    num,*
    from
    table)
    x
    where
    x.num
    =
    1
    column1
    --
    重复列名
    column2
    --
    排序列名
    table
    --
    表名
    table表的column1存在重复值,该SQL是查出根据column2升序排列保留column2最小的所有记录
  3. 答:select
    *
    (select
    row_number()
    over
    (partition
    by
    column1
    order
    by
    column2
    asc)
    as
    num,*
    from
    table)
    x
    where
    x.num
    =
    1
    column1
    --
    重复列名
    column2
    --
    排序列名
    table
    --
    表名
    table表的column1存在重复值,该SQL是查出根据column2升序排列保留column2最小的所有记录
sql去除一列重复数据
下载Doc文档

猜你喜欢