2014-01-12 5 views
1

표는 다음과 같이 생성된다 : (파이썬)하나의 테이블에서 다른 테이블의 멤버가없는 항목을 모두 삭제하려면 어떻게합니까?

cursor.execute("CREATE TABLE Story (dbId INTEGER PRIMARY KEY, title TEXT, quickCode TEXT, gradeLevel TEXT, folder TEXT, expository INTEGER)") 
cursor.execute("CREATE TABLE Question (dbId INTEGER PRIMARY KEY, storyId INTEGER, questionOrder INTEGER, body TEXT, answer TEXT, factual INTEGER)") 
cursor.execute("CREATE TABLE Paragraph (dbId INTEGER PRIMARY KEY, storyId INTEGER, body TEXT, generalization INTEGER)") 

데이터베이스 내 응용 프로그램에 복사하고, 독서 테이블은 다음과 같이 추가 :

static NSString *dbIdColumn   = @"dbId"; 
static NSString *startTimeColumn = @"startTime"; 
static NSString *sessionIdColumn = @"sessionId"; 
static NSString *elapsedTimeColumn = @"elapsedTime"; 
static NSString *totalWordsColumn = @"totalWords"; 
static NSString *markedItemsColumn = @"markedItems"; 
static NSString *readingOrderColumn = @"readingOrder"; 
@implementation ReadingController 

+ (NSString *)creationString { 
    return [NSString stringWithFormat:@"CREATE TABLE Reading (%@ %@, %@ %@, %@ %@, %@ %@, %@ %@, %@ %@, %@ %@)", 
      dbIdColumn, SQL_DB_ID_TYPE, 
      startTimeColumn, SQL_DATE_TYPE, 
      sessionIdColumn, SQL_INTEGER_TYPE, 
      elapsedTimeColumn, SQL_DOUBLE_TYPE, 
      totalWordsColumn, SQL_INTEGER_TYPE, 
      markedItemsColumn, SQL_INTEGER_TYPE, 
      readingOrderColumn, SQL_INTEGER_TYPE 
      ]; 
} 

다음 세션을 추가하고, 일반적으로 읽기 그 세션의 일부로, 때로는 아무런 독서도 만들어지지 않습니다. 나는 다음과 같은 에러 코드를 얻을

+ (void)removeUnusedSessions { 
    [[[DatabaseController singleton]queue]inDatabase:^(FMDatabase *db) { 
     NSString *sql = [NSString stringWithFormat:@"DELETE FROM Session where NOT EXISTS (SELECT NULL FROM Reading.sessionId = Session.dbId)"]; 
     [db executeUpdate:sql]; 
     if (![db hadError]) { 
      NSLog(@"Removed unused Sessions"); 
     } else { 
      NSError *error = [db lastError]; 
      NSLog(@"Unable to remove unused sessions: %@", [error description]); 
     } 
    }]; 
} 

iOS 기기에서 사용하지 않는 세션 (NO 판독있는 사람)을 삭제하려고

:

$0 = 0x11453bf0 Error Domain=FMDatabase Code=1 "near "=": syntax error" UserInfo=0x11444fd0 {NSLocalizedDescription=near "=": syntax error} 

어떤 아이디어이없는 이유 일? 더 나은 접근법에 대한 의견이 있으십니까?

답변

1

하위 쿼리는 구문 적으로 유효한 쿼리 여야합니다. 테이블 이름과 WHERE가 누락되었습니다 : 그냥 완벽한

DELETE FROM Session 
WHERE dbId NOT IN (SELECT sessionId 
        FROM Reading) 
+0

:

DELETE FROM Session WHERE NOT EXISTS (SELECT NULL FROM Reading WHERE Reading.sessionId = Session.dbId) 

이 쿼리를 단순화 할 수있다. 감사! – HalR