#mysql #sql-server
Вопрос:
У меня есть таблица со многими столбцами в SQL Server, и я переместил часть данных в MySQL. Я создал представление или функцию в таблице в SQL Server, и эти две базы данных должны синхронизироваться один раз в день через задание. Потому что данные этого представления могут меняться каждый день.
Представление возвращает таблицу с 3 столбцами: ( char
, varchar
, varchar
), ни один из которых не является уникальным или первичным ключом.
Мое решение таково:
- создайте работу
- выполнение представления на SQL Server
- возвращаемый результат просмотра
- создайте временную таблицу с 3 столбцами в MySQL
- переместить представление результатов из SQL Server во временную таблицу
- перемещайте записи из временной таблицы в новую таблицу одну за другой, если они не существовали ранее
- удалить временную таблицу
Для переноса без использования временной таблицы я хотел использовать приведенный ниже тип запроса, но не смог найти правильный запрос. Вот почему я использовал временную таблицу:
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. Это возможно, но промежуточные таблицы в любом случае распространены. Они повышают производительность, позволяя базе данных делать более точные оценки, а также выделять оперативную память и страницы, поскольку все для окончательной вставки находится в одной и той же базе данных, они помогают избежать сбоев в работе целевой таблицы и упрощают сопоставление записей, чтобы вы могли объединять или пропускать уже существующие записи.