2013-03-13 6 views
0

Я выполняю синхронизацию в своем приложении iOS. У меня уже есть набор таблиц в папке моих документов, и я загружаю данные с сервера во время синхронизации в новый набор таблиц. Я сравниваю количество отдельных таблиц, и если они одинаковые, я использую естественное соединение, чтобы проверить, что они на самом деле одинаковы. Если они совпадают, то мое содержание обновляется, и мне не нужно вносить какие-либо изменения в текущий набор таблиц, иначе я получу новый набор таблиц и сохраню новые данные в качестве текущих таблиц.Natural Join не работает должным образом

Проблема в том, что когда я выполняю естественное соединение для определенных таблиц, хотя я вижу ту же информацию для обеих таблиц в SQLITEMANAGER, естественное соединение возвращает неверный ответ. Не знаю, почему. count_together ошибочно, хотя значения одинаковы.

Это, как я могу осуществить свою проверку (только для иллюстрации):

singleton.table = YES; 
    int count_table1 = 0; 
    int count_table2 = 0; 
    int count_together = 0; 

    NSMutableArray *arrayTables = [[NSMutableArray alloc] initWithObjects:@"DATA",@"TABLE",@"NUMBERS",nil]; 

    NSMutableArray *arrayTables2 = [[NSMutableArray alloc] initWithObjects:@"DATA2",@"TABLE2",@"NUMBERS2", nil]; 

    for(int i =0; i<[arrayTables count]; i++) 
    { 
     count_table1 = [databaseManager checkCountOfTable:[NSString stringWithFormat:@"SELECT COUNT(*) FROM %@",[arrayTables objectAtIndex:i]]]; 

     count_table2 = [databaseManager checkCountOfTable:[NSString stringWithFormat:@"SELECT COUNT(*) FROM %@",[arrayTables2 objectAtIndex:i]]]; 

     NSLog(@"Count of Table 1 is %i",count_table1); 
     NSLog(@"Count of Table 2 is %i",count_table2); 

     if (singleton.table == YES) 
     { 
      if(count_table1 != count_table2) 
      { 
       singleton.table = NO; 
      } 
      else 
      { 
       count_together = [databaseManager checkCountOfTable:[NSString stringWithFormat: @"SELECT COUNT(*) FROM (%@ NATURAL JOIN %@)",[arrayTables objectAtIndex:i],[arrayTables2 objectAtIndex:i]]]; 

       NSLog(@"Count of Table 1 is %i",count_table1); 
       NSLog(@"Count of Tables Together is %i",count_together); 

       if (count_table1 == count_together) 
       { 
        singleton.table = YES; 
       } 
       else 
       { 
        singleton.table = NO; 
       } 
      } 
     } 

    } 

нужны некоторые рекомендации и я радушны к предложениям.

ответ

0

Проблема заключалась в том, что в таблицах были несколько нулевых столбцов. Следовательно, Natural JOIN на этих таблицах не работает. Необходимо убедиться, что в таблицах нет нулевых столбцов, и NATURAL JOIN будет работать нормально.

Смежные вопросы