自然加入不正常

时间:2013-03-13 18:20:15

标签: ios sql sqlite natural-join

我正在iOS应用中进行同步。我的文档文件夹中已有一组表,我在同步期间从服务器下载数据到一组新表中。我正在比较单个表的数量,如果它们是相同的,我使用自然连接来检查它们实际上是相同的。如果它们是相同的,那么我的内容是最新的,我不需要对我当前的表集进行任何更改,否则我将获取新的表集并将新数据存储为当前表。 / p>

问题在于,当我对某些表进行自然连接时,虽然我在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;
                }
            }
        }

    }

需要一些指导,欢迎提出建议。

1 个答案:

答案 0 :(得分:0)

问题是表中有一些空列。因此,这些表上的Natural JOIN不起作用。必须确保表没有任何空列,并且NATURAL JOIN将正常工作。