<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      MySQL消除重復行方法步驟

      [摘要]本文主要介紹了MySQL 消除重復行的一些方法,需要的朋友可以參考下,希望能幫助到大家。sql語句/*MySQL 消除重復行的一些方法---Chu Minfei---2010-08-12 22:49...
      本文主要介紹了MySQL 消除重復行的一些方法,需要的朋友可以參考下,希望能幫助到大家。

      sql語句


      /*
      MySQL 消除重復行的一些方法
      ---Chu Minfei
      ---2010-08-12 22:49:44.660
      --引用轉載請注明出處:http://blog.csdn.NET/feixianxxx
      */
      ----------------全部字段重復------------------------
       --1使用表替換來刪除重復項
       create table test_1(id int,value int);
       insert test_1 select 1,2 union all select 1,2 union all select 2,3;
       --建立一個和源表結構一樣的空的臨時表
       create table tmp like test_1;
       --向臨時表插入不重復的記錄
       insert tmp select distinct * from test_1;
       --刪除原表
       drop table test_1;
       --更改臨時表名為目標表
       rename table tmp to test_1;
       --顯示
       mysql> select * from test_1;
      +------+-------+
        id    value  
      +------+-------+
         1     2  
         2     3  
      +------+-------+
       --2.添加auto_increment屬性列(這個方法只能用于MyISAM或者BDB引擎的表)
       create table test_1(id int,value int) engine=MyISAM;
       insert test_1 select 1,2 union all select 1,2 union all select 2,3;
       alter table test_1 add id2 int not null auto_increment,
       add primary key(id,value,id2);
       select * from test_1;
      +----+-------+-----+
        id   value   id2  
      +----+-------+-----+
        1     2    1  
        1     2    2  
        2     3    1  
      +----+-------+-----+
        delete from test_1 where id2<>1;
        alter table test_1 drop id2;
        select * from test_1;
        +----+-------+
        id   value  
      +----+-------+
        1     2  
        2     3  
      +----+-------+
      -------------------部分字段重復---------------------
      --1.加索引的方式
       create table test_2(id int,value int);
       insert test_2 select 1,2 union all select 1,3 union all select 2,3;
       Alter IGNORE table test_2 add primary key(id);
       select * from test_2;
       +----+-------+
        id   value  
      +----+-------+
        1     2  
        2     3  
      +----+-------+
       我們可以看到 1 3 這條記錄消失了 
       我們這里也可以使用Unique約束 因為有可能列中有NULL值,但是這里NULL就可以多個了..
       --2.聯合表刪除
       create table test_2(id int,value int);
       insert test_2 select 1,2 union all select 1,3 union all select 2,3;
       delete A from test_2 a join (select MAX(value) as v ,ID from test_2 group by id) b
       on a.id=b.id and a.value<>b.v;
       select * from test_2;
       +------+-------+
        id    value  
      +------+-------+
         1     3  
         2     3  
      +------+-------+
      --3.使用Increment_auto也可以就是上面全部字段去重的第二個方法
      --4.容易錯誤的方法
      --有些朋友可能會想到子查詢的方法,我們來試驗一下
       create table test_2(id int,value int);
       insert test_2 select 1,2 union all select 1,3 union all select 2,3;
       delete a from test_2 a where exists(select * from test_2 where a.id=id and a.value<value);
       /*ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause*/
       
       目前,您不能從一個表中刪除,同時又在子查詢中從同一個表中選擇。
       
       
       ------------------刪除特定重復行--------------
       --主要通過order by +limit 或者直接limit 
       create table test_3(id int,value int);
       insert test_3 select 1,2 union all select 1,3 union all select 1,4 union all select 2,3;
       --這是要保留ID=1 value最小的那個記錄,刪除其他id為的記錄
       delete from test_3 where id=1 order by value desc limit 2;
       select * from test_3;
      +------+-------+
        id    value  
      +------+-------+
         1     2  
         2     3  
      +------+-------+
       如果你只想刪除任意的記錄 保留一條 就可以去掉order by

      相關推薦:

      php處理文本文檔重復行

      關于消除重復行的詳細介紹

      MySQL如何消除重復行的方法分析

      以上就是MySQL消除重復行方法步驟的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清