2016-10-25 13 views
1

良い午後、私はコミュニティに新しいです、私はこの質問をする時間に間違っていた場合は、私を修正してください、私は非常に感謝します。 私は2つの列にphone_numberとそれらの名前を含むテーブルを持っています。私は、彼らが同じPHONE_NUMBERを持っている場合、T1とT2の間の重複を削除する必要がありますが、私は、ステータス「」A「」を持っている数を作りたいMySQLから重複した行を削除するには?削除

Phone_number status 
“9999999999” “A” 

私はこの問題を解決しようとした例を作ったが、何かが欠けているのは、結果が私が探しているものではないからだ。

DELETE t1.* 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.phone_number = t2.phone_number 
    AND t1.status !="A" 

誰かが私を助けてくれますか?

+0

表の2つの列のみ? – jarlh

+0

テーブルt1、t2およびurの両方のサンプルデータを投稿することはできますか?電話番号に複製されたtablenameレコードに – Teja

+0

という出力がありますが、ステータスが異なるので重複は削除されますが、 ' –

答えて

0

「T1とT2の間の削除」という意味はわかりません。明らかに、サンプルコードのT1から削除しようとしているだけです。

以下は、フォームのt2に行がある場合(phone_number、 'A')、フォームのt1(phone_number、 'A'ではなく)から行を削除します。 T1 = T2の場合、これは同じ電話番号の複製であるT1からすべての行を削除し、ステータス「A」の電話番号のコピーのみを残します。 !

はt1.status = 'A' と(T2 t2.phone_number = t1.phone_numberとt2.status = 'A' からPHONE_NUMBER を選択)で t1.phone_number T1から削除します。

+0

のtablenameレコードはphone_numberに複製されていますがステータスが異なるので重複は削除されますが、電話番号に重複してステータスは異なるtablenameレコードにステータス' 'A' ' –

0

私が必要としているものが正しく理解されていれば、ステータスがもう一方のテーブルにあるときにテーブルから削除することです。別の方法は、あなたのT1からのみ個別の行を選択して、新しいテーブルに挿入することであり得る

DELETE t1 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.phone_number = t2.phone_number 
    AND t1.status !='A' AND t2.status='A' 

DELETE t2 
FROM 
    tablename t1 INNER JOIN tablename t2 
    ON t1.phone_number = t2.phone_number 
    AND t1.status ='A' AND t2.status !='A' 
+0

の登録抹消はありません、重複を取り除くことに興味がありますが、ステータスが「A」の登録抹消はありません –

0

CREATE TABLE newtable LIKE `table`; 
INSERT INTO `newtable` SELECT DISTINCT * FROM `table`; 

その後、あなたが適切に両方のテーブルの名前を変更することができそうならば、次の2つの削除が必要。もちろん、これは一度だけ意味があります。