Cykliczne kopiowanie bez powtórzeń

0

Witam,

Jak najprościej można wykonać kopiowanie z jednej tabeli do drugiej, tak, żeby ominąć wcześniej skopiowane rekordy.
Dodać do kopiowanej tabeli jakąś kolumnę, która będzie znacznikiem ? Zapisywać gdzieś ID z wiersza ostatnio kopiowanego ?
Chce ustawić to w Jobach, ale nie wiem jak zbudować zapytanie pomijające wcześniejsze kopie.

0

zakladajac ze schemat jest taki sam i masz unique constraint na id:

insert into tabela_docelowa
select * from tabela_zrodlowa where id > (select max(id) from tabela_docelowa)
0

Albo jeśli nie da się odciąć po ID:

insert into tabela_docelowa
select * from tabela_zrodlowa where id not in (select id from tabela_docelowa)
0

Myślę, że pierwszy przykład będzie trochę praktyczniejszy w późniejszym okresie, gdy rekordów będzie przybywało. Chyba, że się mylę i oba zapytania tak samo obciążają serwer?

0

jesli id nie sa nadawane sekwencyjnie to najszybciej bedzie chyba:

INSERT INTO tabela_docelowa
SELECT * FROM tabela_zrodlowa z WHERE not exists (SELECT 1 FROM tabela_docelowa d where d.id = z.id)

gdy rekordów będzie przybywało

przy indeksie na id i odpowiednim warunku (np po rowniez indeksowanym polu inserted_date) liczba rekordow nie powinna miec znaczenia

0

Najszybszy będzie left join z nullem

0

A np. Truncate tabeli pierwszej i skopiowanie wszystkich danych z 2 ? :D (chyba, że 2 tabela jest co jakiś czas czyszczona i nie ma wszystkich danych :|)

1 użytkowników online, w tym zalogowanych: 0, gości: 1