Результат синхронизации представления SQL Server и таблицы MySQL

#mysql #sql-server

Вопрос:

У меня есть таблица со многими столбцами в SQL Server, и я переместил часть данных в MySQL. Я создал представление или функцию в таблице в SQL Server, и эти две базы данных должны синхронизироваться один раз в день через задание. Потому что данные этого представления могут меняться каждый день.

Представление возвращает таблицу с 3 столбцами: ( char , varchar , varchar ), ни один из которых не является уникальным или первичным ключом.

Мое решение таково:

  1. создайте работу
  2. выполнение представления на SQL Server
  3. возвращаемый результат просмотра
  4. создайте временную таблицу с 3 столбцами в MySQL
  5. переместить представление результатов из SQL Server во временную таблицу
  6. перемещайте записи из временной таблицы в новую таблицу одну за другой, если они не существовали ранее
  7. удалить временную таблицу

Для переноса без использования временной таблицы я хотел использовать приведенный ниже тип запроса, но не смог найти правильный запрос. Вот почему я использовал временную таблицу:

 insert into new_table
    values (array of records) where record if not exist in new table.
 

И для решения, о котором я упоминал выше, я использовал следующий запрос:

 insert into new_table
    select *
    from temp_table
    where not exist new_table.column = temp_table.column
 

У вас есть лучшее предложение, чтобы новые записи можно было извлекать и добавлять к предыдущим записям?

Ответ №1:

Это должно выглядеть примерно так:

 insert into new_table
    select *
    from temp_table
    where not exists (
        select 1 
        from new_table
        where new_table.column = temp_table.column            
    )
 

или, может быть, это:

 insert into new_table
    select *
    from temp_table
    where not exists (
        select 1 
        from new_table
        where new_table.column = temp_table.column
            and new_table.column2 = temp_table.column2
            and new_table.column3 = temp_table.column3         
    )
 

Комментарии:

1. Вы знаете лучший способ, чем сделать средний стол? На мой взгляд, лучший способ-прочитать добавленные записи из исходной таблицы и переместить их непосредственно в целевую таблицу.

2. Это возможно, но промежуточные таблицы в любом случае распространены. Они повышают производительность, позволяя базе данных делать более точные оценки, а также выделять оперативную память и страницы, поскольку все для окончательной вставки находится в одной и той же базе данных, они помогают избежать сбоев в работе целевой таблицы и упрощают сопоставление записей, чтобы вы могли объединять или пропускать уже существующие записи.