2011-09-10 31 views
4

1行を除くすべてを削除しますが、PHPとともに削除したいと思います。SQL内の1行を除くすべての行を削除する方法

私は重複した情報を削除することは私の問題のためのより簡単な解決策になると思う。

オクラホマ...私はすでにやったことが分かりました。

基本的に私はテーブル(dev_discs)を持っていて、私は 'discReference'列の重複を検索し、残りの1行を残して1つを除いてすべてを削除したいと思います。

これを行う簡単なクエリはありますか?私はネット上で同様の状況に遭遇し、それらはすべて複雑です...私は非常に複雑なシナリオではないと思います。

+0

RDBMSとは何ですか?何か 'MySQL'以外のものがあれば[ここでの答えの1つがうまくいくはずです](http:// stackoverflow。com/q/18932/73226)、MySQLはサブクエリで削除しているテーブルを参照するのに面白いです。 –

+0

あなたは何をしようとしていますか? 1つの行の重複をすべて削除しますか?行のグループの重複をすべて削除しますか?テーブルのすべての行の重複をすべて削除しますか?テーブル1のすべての行を削除しますか? – xanatos

+0

削除クエリを作成するための選択クエリだけでもっともシンプルなように思えます。 –

答えて

0

簡単な方法ではありませんが、AFAIK。 PHPでは、難しくありません(SQLを使用するだけで簡単にこれを行うことはできません)。

  1. 元のものと同じ構造を持つ新しいテーブルを作成します。

    は表dev_discs_noduplicates( ...)を作成します。 dupe_col1 BY 1基、dupe_col2 dev_discs FROM

    SELECT *;

  2. は重複を除去するGROUP句を使用して元のテーブルから全ての非重複データをフェッチ結果以上

  3. 反復して、新しいテーブルにそれらを挿入します。dev_discs_noduplicates INTO

    INSERT ...。

  4. 削除古いテーブル

    のDROP TABLEのdev_discs。

  5. は、新しいテーブルの名前を変更します。

    RENAMEテーブルdev_discs_nodulicates dev_discs TO。

@xanatosは当然、データベース内の可能な関係の損失を述べているので、[EDIT]

、ここではSQLとPHPを伴う代替ソリューションです。

まず、ユニークな行をフェッチ:

SELECT id FROM dev_discs GROUP BY col1, col2; 

はそれを内破し、削除クエリで使用し、PHPの配列にこれらを持って:

DELETE FROM dev_discs WHERE (id) NOT IN (@arr); 

これは、すべての可能な問題の世話をする必要があります。

+0

あなたがあなたのテーブルに持っていたすべての関係、テーブル上のACLを失ってしまった... – xanatos

+0

@ xanatos:はい、それらが外部キーやトリガであれば、それらも失われます。私はOPがこれらを再現できると仮定します。さらに、彼はこれらについて言及していないので、私の答えにはそれらも含まれていないことは論理的です。私はあなたの解決策を知りたいと思っています、私はそれが弾丸でないと思われます;)。 – mingos

+0

これはかなり簡単です:-) http://www.kodyaz.com/articles/delete-duplicate-rows-using-row-number-partition-by-order-by.aspx ROW_NUMBER()とCTEを使って重複します。 OPは彼が使用しているSQLを指定していないので、私はそれをレスポンスに書いていません。質問に従わない人は良い答えを得られないと思います。あなたが望むなら、あなたは私と記事からそれを自由に盗むことができます:-) – xanatos

0
DELETE FROM discs dd WHERE EXISTS 
    (SELECT * FROM discs d2 
    WHERE d2.discReference = dd.discReference 
    AND d2.rownumber < dd.rownumber 
    ); 

"rownumber"はDBMSによって提供される内部IDです。 tid、oidと呼ぶことができます。

+0

MySQLでは、あなたが削除しているテーブルからselectサブクエリを使用することはできません。 – mingos

関連する問題