Mysqlデータベース指定フィールドの重複データを削除
1784 ワード
mysqlデータベース指定したフィールドの重複データを削除
問題の背景:
現在、データの重み付けが必要な問題が発生しています.
name
sex
email
address
tony
man
[email protected]
dalian
tony
man
[email protected]
dalian
名前フィールドにプライマリ・キーを追加します.これは重複する値を洗い流す必要があります.現在採用されている方式は以下の通りである.
テーブルを作成するsqlは
データの作成
nameフィールドをプライマリ・キーとして定義する必要があります
nameフィールドをプライマリ・キーとして定義すると、問題が発生し、nameフィールドはどのように修正されますか?まず重複値を削除する必要があります.
テンポラリ・テーブルで処理できます.変数でフィールドを追加することで、テーブルの一意の識別 を行うことができます.上記の方法でテンポラリテーブル を作成する.テンポラリ・テーブルのデータ表示を実行する
rownum
name
sex
email
address
1
tony
man
[email protected]
dalian
2
tony
man
[email protected]
dalian customerを直接tempテーブルのデータ削除.
サブクエリにサブクエリが追加された理由
今はrownumの最大の1つしか残っていません.残りのステップは、前のテーブルを削除してcustomers_tempの名前をcustomersに変更すればいいです.
問題の背景:
現在、データの重み付けが必要な問題が発生しています.
name
sex
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
address
1
tony
man
[email protected]
dalian
2
tony
man
[email protected]
dalian
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;