-
Такой вопрос: можно ли SQL-запросом синхронизировать 2 таблицы? Что значит синхронизировать: нужно чтоб из 2-х таблиц получилась одна. Одинаковые записи не дублировались. Но! Такие нюансы: 1. Одинаковыми следует считать записи не когда они полностью идентичны, а только по определенным полям. 2. В итоговую таблицу должна занестись запись представляющая из себя наиболее полную сумму всех данных из двух таблиц. Поясню: записи считаются одинаковыми если у них одинаковые поля времени, позывного, диапазона и модуляции. Однако если в одной таблице есть в этой же записи данные о имени, а в другой адрес - в итоговую таблицу должно занестись из одной таблицы имя, из другой - адрес. Как такое вот правильно сделать? Раньше просто пробегался по всем строкам таблиц и сравнивал их. Но это медленно.
-
-
update Table1 T1 set T1.ПолеОбъединения = T1.ПолеОбъединения ПЛЮС T2.ПолеОбъединения where T1.поля времени, позывного, диапазона и модуляции = T2.поля времени, позывного, диапазона и модуляции.
and T1.ПолеОбъединения <> T2.ПолеОбъединения
-
insert into table3
select T1.Id, coalesce(T1.address, T2.address)
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.Id=T2.Id
-
Спасибо за ответы, но не то, т.к. в [2] - мы ничего не вставляем. Только UPDATE в [3] - итоговая таблица будет включать повторы. Сейчас подумал - за один запрос не получится. Думаю правильно будет как раз 2 запроса делать - 1 на UPDATE [2], второй на вставку по аналогии с [3]. За один запрос все же не получится.
-
> [4]
повторы чего? JOIN оставляет в результирующем наборе только уникальные записи.
-
> Alex_C (21.12.11 14:07) [4]
> в [2] - мы ничего не вставляем. Только UPDATE
правильно, зачем еще куда-то что-то вставлять. Из второй таблицы подтягивается в первую то, что там не хватает Вторую можно дропнуть после.
> в [3] - итоговая таблица будет включать повторы.
не будет
преписать можно аля insert into table3 select T1.Id, T1.address ПЛЮС T2.address FROM Table1 T1 LEFT JOIN Table2 T2 ON T1.Id=T2.Id
ПЛЮС - разные варианты объединения подразумевает, понятное дело, в зависимости от типа поля и логики "объединения" простое coalesce проигнорит остальное, после первого же не null
например T1 (Вася) (Купил_хлеб)
T2 (Вася) (Купил_молоко)
T3 должно быть (Вася) (Купил_хлеб Купил_молоко) с coalesce же будет (Вася) (Купил_хлеб)
|