xcode sqlite удалить строку в одной таблице, где EXISTS в другой таблице - PullRequest
1 голос
/ 27 января 2012

Когда я запускаю следующий код для удаления строки из таблицы MAIN.NOTES, если для tasks.todoDone не найдено совпадений, в MAIN.NOTES ничего не удаляется.Но если один tasks.todoDone больше '', то все строки в MAIN.NOTES удаляются, даже если task.todoNod не меньше nod.

Вторая часть кода, удаляемая из MAIN.TASKSработает правильно и удаляет только те строки, которые соответствуют обоим тестам.

Что я не так сделал в своих EXISTS (выберите * строку?

if (sqlite3_open(dbpath, &tasksDB) == SQLITE_OK) {
    NSString *querySQLNotes = [NSString stringWithFormat:@"DELETE FROM MAIN.NOTES WHERE EXISTS (select * from MAIN.TASKS where tasks.todoNod <'%i' and tasks.todoDone > '')",nod];

    char *errMsg;
    const char *query_stmtN = [querySQLNotes UTF8String];// this should delete the notes for task that will be deleted next
    if (sqlite3_exec(tasksDB, query_stmtN, NULL, NULL, &errMsg) == SQLITE_OK) {
        int tc = sqlite3_changes(tasksDB);
        NSLog(@"total count of deleted notes %i",tc);
    }

    NSString *querySQL = [NSString stringWithFormat:@"DELETE FROM MAIN.TASKS WHERE todoNod <'%i' and todoDone > ''",nod];

    const char *query_stmt = [querySQL UTF8String];        
    if (sqlite3_prepare_v2(tasksDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
        if (sqlite3_step(statement) == SQLITE_DONE) {
            NSLog(@"Match found and deleted");
        } else {
            NSLog(@"Match found and not deleted");
        }
        sqlite3_finalize(statement);  
        int tc = sqlite3_changes(tasksDB);
        NSLog(@"total count of deleted tasks %i",tc);
    }
    sqlite3_close(tasksDB);
} 

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...