2016-03-02 66 views
0

我是相当新的SQL和我有以下问题:SQLite的:删除所有行,除了那些外键具有特定值

我做存储3个表到数据库中的Android应用程序。

  • 电影,有一个自定义的I类称为电影相关

  • 拖车,有一个自定义的I类叫拖车

  • 评论,有一个自定义的I类叫做评论

  • 相关的关联

当应用程序触发事件时,我想要创建一条SQL语句,该语句将删除所有未标记为favori的电影TE。此外,它必须删除与未标记为收藏的电影相关的每个预告片和评论。 为了将电影标记为收藏,我添加了一个可以有3个值的整数列:(0,1,2)。当电影条目的值为2时,它是最喜欢的,因此不能删除。

这是我表的结构:

 //SQL statement to create the movies table 
    final String SQL_CREATE_FAVOURITES_TABLE = "CREATE TABLE " + 
      MoviesEntry.TABLE_NAME + " (" + 
      MoviesEntry.COLUMN_MOVIE_ID + " INTEGER PRIMARY KEY," + 
      MoviesEntry.COLUMN_POSTER_URL + " TEXT NOT NULL," + 
      MoviesEntry.COLUMN_TITLE + " TEXT NOT NULL," + 
      MoviesEntry.COLUMN_PLOT + " TEXT NOT NULL," + 
      MoviesEntry.COLUMN_RATING_AVERAGE + " REAL NOT NULL," + 
      MoviesEntry.COLUMN_RATING_COUNT + " INTEGER NOT NULL," + 
      MoviesEntry.COLUMN_RELEASE_DATE + " TEXT NOT NULL, " + 
      MoviesEntry.COLUMN_MOVIE_TYPE + " INTEGER NOT NULL, " + 
      "CHECK (" + MoviesEntry.COLUMN_MOVIE_TYPE + " IN (0,1,2))" + ");"; 

    //SQL statement to create the trailers table 
    final String SQL_CREATE_TRAILERS_TABLE = "CREATE TABLE " + 
      TrailersEntry.TABLE_NAME + " (" + 
      TrailersEntry.COLUMN_VIDEO_ID + " TEXT PRIMARY KEY," + 
      TrailersEntry.COLUMN_YOUTUBE_PATH + " TEXT NOT NULL," + 
      TrailersEntry.COLUMN_VIDEO_NAME + " TEXT NOT NULL," + 
      TrailersEntry.COLUMN_MOVIE_ID + " INTEGER NOT NULL, " 
      //COLUMN_MOVIE_ID is a foreign key to favourites table 
      + " FOREIGN KEY (" + TrailersEntry.COLUMN_MOVIE_ID + ") REFERENCES " + 
      MoviesEntry.TABLE_NAME + " (" + MoviesEntry.COLUMN_MOVIE_ID + "), " + 
      //Each trailer for a movie has to be unique 
      " UNIQUE (" + TrailersEntry.COLUMN_VIDEO_ID + ", " + 
      TrailersEntry.COLUMN_MOVIE_ID + ") ON CONFLICT REPLACE);"; 

    //SQL statement to create the reviews table 
    final String SQL_CREATE_REVIEWS_TABLE = "CREATE TABLE " + 
      ReviewsEntry.TABLE_NAME + " (" + 
      ReviewsEntry.COLUMN_REVIEW_ID + " TEXT PRIMARY KEY," + 
      ReviewsEntry.COLUMN_AUTHOR + " TEXT NOT NULL," + 
      ReviewsEntry.COLUMN_CONTENT + " TEXT NOT NULL," + 
      ReviewsEntry.COLUMN_MOVIE_ID + " INTEGER NOT NULL, " + 
      //COLUMN_MOVIE_ID is a foreign key to the favourites table 
      " FOREIGN KEY (" + ReviewsEntry.COLUMN_MOVIE_ID + ") REFERENCES " + 
      MoviesEntry.TABLE_NAME + " (" + MoviesEntry.COLUMN_MOVIE_ID + "), " + 
      //Each review for a movie has to be unique 
      " UNIQUE (" + ReviewsEntry.COLUMN_REVIEW_ID + ", " + 
      ReviewsEntry.COLUMN_MOVIE_ID + ") ON CONFLICT REPLACE);"; 

    db.execSQL(SQL_CREATE_FAVOURITES_TABLE); 
    db.execSQL(SQL_CREATE_TRAILERS_TABLE); 
    db.execSQL(SQL_CREATE_REVIEWS_TABLE); 

你能帮助我弄清楚如何构建删除语句,将做到这一点?

非常感谢。

回答

1

基于thisthis,我想你可以这样做:

DELETE FROM Reviews 
WHERE movie_id NOT IN (SELECT m.id 
        FROM Movies m where movie_type = 2) 

DELETE FROM Trailers 
WHERE movie_id NOT IN (SELECT m.id 
        FROM Movies m where movie_type = 2) 

DELETE FROM Movies WHERE movie_type = 2 
+0

完美,非常感谢你! –

相关问题