Конференция "Базы" » Синхронизировать 2 таблицы. [D7, Access]
 
  • Alex_C (21.12.11 11:08) [0]
    Такой вопрос: можно ли SQL-запросом синхронизировать 2 таблицы? Что значит синхронизировать: нужно чтоб из 2-х таблиц получилась одна. Одинаковые записи не дублировались. Но! Такие нюансы:
    1. Одинаковыми следует считать записи не когда они полностью идентичны, а только по определенным полям.
    2. В итоговую таблицу должна занестись запись представляющая из себя наиболее полную сумму всех данных из двух таблиц.
    Поясню:
    записи считаются одинаковыми если у них одинаковые поля времени, позывного, диапазона и модуляции.
    Однако если в одной таблице есть в этой же записи данные о имени, а в другой адрес - в итоговую таблицу должно занестись из одной таблицы имя, из другой - адрес.
    Как такое вот правильно сделать? Раньше просто пробегался по всем строкам таблиц и сравнивал их. Но это медленно.
  • знайка (21.12.11 11:23) [1]
  • OW © (21.12.11 11:47) [2]
    update Table1 T1
    set T1.ПолеОбъединения = T1.ПолеОбъединения  ПЛЮС T2.ПолеОбъединения
    where
    T1.поля времени, позывного, диапазона и модуляции = T2.поля времени, позывного, диапазона и модуляции.

    and T1.ПолеОбъединения <> T2.ПолеОбъединения
  • RWolf © (21.12.11 11:49) [3]

    insert into table3
    select T1.Id, coalesce(T1.address, T2.address)
    FROM Table1 T1
    LEFT JOIN Table2 T2 ON T1.Id=T2.Id

  • Alex_C (21.12.11 14:07) [4]
    Спасибо за ответы, но не то, т.к.
    в [2] - мы ничего не вставляем. Только UPDATE
    в [3] - итоговая таблица будет включать повторы.
    Сейчас подумал - за один запрос не получится. Думаю правильно будет как раз 2 запроса делать - 1 на UPDATE [2], второй на вставку по аналогии с [3]. За один запрос все же не получится.
  • RWolf © (21.12.11 14:10) [5]

    > [4]

    повторы чего? JOIN оставляет в результирующем наборе только уникальные записи.
  • OW © (21.12.11 15:00) [6]

    > 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  же будет
    (Вася) (Купил_хлеб)
 
Конференция "Базы" » Синхронизировать 2 таблицы. [D7, Access]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]