Mysqlデータベース指定フィールドの重複データを削除

1784 ワード

mysqlデータベース指定したフィールドの重複データを削除
問題の背景:
現在、データの重み付けが必要な問題が発生しています.
name
sex
email
address
tony
man
[email protected]
dalian
tony
man
[email protected]
dalian
名前フィールドにプライマリ・キーを追加します.これは重複する値を洗い流す必要があります.現在採用されている方式は以下の通りである.
テーブルを作成するsqlは
create table customers(
`name` varchar(30),
sex varchar(5),
email varchar(50),
address varchar(100)
);


データの作成
insert into customers values ('tony','man','[email protected]','dalian');
insert into customers values ('tony','man','[email protected]','dalian');


nameフィールドをプライマリ・キーとして定義する必要があります
nameフィールドをプライマリ・キーとして定義すると、問題が発生し、nameフィールドはどのように修正されますか?まず重複値を削除する必要があります.
テンポラリ・テーブルで処理できます.
  • 変数でフィールドを追加することで、テーブルの一意の識別
  • を行うことができます.
    set @rownum =0;
    select @rownum:=ifnull(@rownum,0)+1 as rownum , c.*from customers c;
    
    
  • 上記の方法でテンポラリテーブル
  • を作成する.
    set @rownum =0;
    create table customers_temp select @rownum:=ifnull(@rownum,0)+1 as rownum , c.*from customers c;
    
    
  • テンポラリ・テーブルのデータ表示を実行する
  • select * from customer_temp;
    
    

    rownum
    name
    sex
    email
    address
    1
    tony
    man
    [email protected]
    dalian
    2
    tony
    man
    [email protected]
    dalian
  • customerを直接tempテーブルのデータ削除.
  • Delete from customers_temp Where rownum Not In (Select Max(t.rownum) From (select * from customers_temp ) t Group By `name`);
    
    

    サブクエリにサブクエリが追加された理由
    今はrownumの最大の1つしか残っていません.残りのステップは、前のテーブルを削除してcustomers_tempの名前をcustomersに変更すればいいです.
    drop table customers;
    
    RENAME TABLE customers_temp TO customers;