Запрос Sqlite: Как можно обрабатывать слияния, а также обрабатывает, когда я обновляю его - PullRequest
0 голосов
/ 01 мая 2018

У меня есть две таблицы sqlite, которые успешно слились с использованием этого кода;

private static void MergeDatabase(string table, string mainDatabase, string mergeDatabase)
    {
        string SQL = "ATTACH '" + mergeDatabase + "' AS TOMERGE";
        SQLiteCommand cmd = new SQLiteCommand(SQL);

        string databasePath = mainDatabase;
        string connectionString = string.Format("Data Source={0}; Version=3", databasePath);
        SQLiteConnection connection = new SQLiteConnection(connectionString);

        cmd.Connection = connection;
        connection.Open();
        int retval = 0;
        try
        {
            retval = cmd.ExecuteNonQuery();
        }
        catch (Exception)
        {
            Console.WriteLine(DateTime.Now.ToString("yy.MM.dd HH:mm:ss") + " An error occurred, your import was not completed.");
        }
        finally
        {
            cmd.Dispose();
        }

        SQL = "INSERT INTO " + table + " SELECT * FROM TOMERGE." + table + " WHERE Name NOT IN (SELECT Name FROM " + table + ")";
        cmd = new SQLiteCommand(SQL);
        cmd.Connection = connection;
        retval = 0;
        try
        {
            retval = cmd.ExecuteNonQuery();
        }
        catch (Exception)
        {
            Console.WriteLine(DateTime.Now.ToString("yy.MM.dd HH:mm:ss") + " An error occurred, your import was not completed.");
        }
        finally
        {
            cmd.Dispose();
            connection.Close();
        }
    }

Senario1

Результат:

Result


Да, это слияние, но я не знаю, как с этим справиться, если я просто обновлю некоторые элементы в таблице2, как это;


senario2

Как вы видите, обновленный элемент из таблицы 2 только вверх.

Я хочу что-то, что может обрабатывать слияния, а также обрабатывать, когда я обновляю некоторые элементы в table2, он просто обновляется в table1, не добавляя их.

1 Ответ

0 голосов
/ 01 мая 2018

Я считаю, что следующее будет делать то, что вы хотите: -

INSERT OR REPLACE INTO table1 SELECT * FROM table2 WHERE id||name NOT IN (SELECT id||name FROM table1);

Это в основном добавляет OR REPLACE, который заменит строку вместо вставки строки при конфликте ограничений UNIQUE или PRIMARY KEY.

Предложение WHERE немного изменено для проверки идентификатора и имени, а не только имени.

Имена основаны на примерах, т. Е. Таблица1 и таблица2.

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

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