1

table_newsこれらのフィールドを含むテーブルがあります:

_ID = INTEGER PRIMARY KEY AUTOINCREMENT 
ID = TEXT NOT NULL 
CONTENT = TEXT NOT NULL
ZONE TEXT = NOT NULL 
AREA TEXT = NOT NULL
TITLE TEXT = NOT NULL
DATE TEXT = NOT NULL
AUTHOR TEXT = NOT NULL

この表は次のように記入されます。

Column    Row 1 Value                   Row 2 Value
------------------------------------------------------
_ID       1                             2
ID        "5"                           "5"
CONTENT   "Discover New York."          "Discover New York."
ZONE      "New York"                    "New York"
AREA      "New York"                    "New York"
TITLE     "Let's discover the world."   "Let's discover the world."
DATE      "2012-07-04"                  "2012-07-04"   
AUTHOR    "Henry Brakman"               "Henry Brakman"

したがって、これらの重複した行の 1 つを削除するために SQL ステートメントを作成したいだけです。

私はこれを試しました(読みやすくするために改行が追加され、コマンドは単一の文字列として書かれています):

public SQLiteStatement removeSameContentNews() { 
   return bdd.compileStatement("DELETE FROM table_news "
      + "WHERE _ID NOT IN (SELECT MIN( _ID) "
      + "FROM table_news "
      + "GROUP BY ID, CONTENT, ZONE, AREA, TITLE, DATE, AUTHOR)"); 
}

しかし、これは何も削除しませんでした..

私は最終的に UNIQUE キーワードで一意性を使用しましたが、正しく機能しています:

private static final String CREATE_TABLE_NEWS = 
   "CREATE TABLE " + TABLE_NEWS + " (" + COLUMN_ROWID 
   + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_ID 
   + " TEXT NOT NULL UNIQUE, " + COL_CONTENT 
   + " TEXT NOT NULL, " + COL_ZONE + " TEXT NOT NULL, "
   + COL_AREA + " TEXT NOT NULL, " + COL_TITLE 
   + " TEXT NOT NULL, " + COL_DATE + " TEXT NOT NULL, " 
   + COL_AUTHOR + " TEXT NOT NULL);";
4

1 に答える 1

2

次のクエリの例を使用できます。

DELETE FROM table WHERE _ID NOT IN (
    SELECT MIN( _ID) 
    FROM table 
    GROUP BY ID, CONTENT, ZONE, AREA, TITLE, DATE, AUTHOR
)

編集

または、次を使用できます。

DELETE FROM table_news WHERE EXISTS
  (SELECT 1 FROM table_news t
    WHERE t.ID=table_news.ID AND 
    t.ID=table_news.CONTENT AND  
    t.ID=table_news.ZONE AND  
    t.ID=table_news.AREA AND  
    t.ID=table_news.TITLE AND  
    t.ID=table_news.DATE AND  
    t.ID=table_news.AUTHOR AND 
    t.rowid > table_news.rowid)
于 2012-07-20T13:53:28.380 に答える