1

mysqlで単純な削除のように見えることを実行したいのですが、問題が発生しています。私はこれをしたい:

delete from table where col_name not in (select distinct col_name from table);

このテーブルには一意のキーがありません。これを試してみると、次のエラーが発生します。

from句で更新するターゲットテーブルを指定することはできません。ErrorNr。1093

mysqlコミュニティ5.1

このクエリからの出力を保存する方法はありますか->

select distinct col_name from table;

臨時雇用者に。テーブルを削除クエリで使用しますか?

4

2 に答える 2

3

エイリアスを使用する必要があります。

delete from table where col_name not in (select a.col_name from (select distinct col_name from table) a);

動作するはずです。

編集:申し訳ありませんが、私は質問を誤解し、SQLエラーのみに焦点を当てています。一意のキーがない重複行を削除する問題は、上記の要求では解決されません。

于 2011-11-10T16:32:22.073 に答える
0

受け入れられた@Molochdaaによる答えは間違っています

説明。これがテーブルだとしましょう

col_name |  value
------------------
east     |  10
west     |  15
east     |  10
west     |  15
north    |  5
east     |  10
north    |  5

table_nameから個別のcol_nameを選択すると、次のようになります。

col_name
------------------
east     
west     
north    

今、あなたが書くときdelete from table where col_name not in ( ... )、すべての列が返されたリストにあるので、行は返されません

正解は次のようになります(@jeffery_the_windによる提案)

delete from table where col_name in (
   select a.col_name from (
      select col_name from table group by col_name having count(*)>1
   ) a
)

より単純な別の答え

delete from table_name
       where rowid not in ( select min(rowid) 
                            from Table_name
                            group by column1..,column2,...column3..)
于 2014-02-22T05:11:04.140 に答える